1

我有一个小部件,我在里面添加了 300 个像素图。

MyWidget::MyWidget( QWidget *parent )
{
    setParent(parent);
    FlowLayout *flowLayout = new FlowLayout(this, 2,2,2);
    setLayout(flowLayout);

    QPixmap* cupcakes = new QPixmap("Resources/Icons/pimpCupcakes.png");
    TilePixmap* tilePximap = new TilePixmap(cupcakes, 0);
    m_buttonGroup = new QButtonGroup(this);

    int id = 0;
    for(int i=0; i<300; ++i)
    {
        TilesetButton* buttonTmp = new TilesetButton(this, tilePximap);
        m_buttonGroup->addButton(buttonTmp, id);
        flowLayout->addWidget(buttonTmp);
        id++;
    }
}

我在 QTabWidget 中有这个小部件,如下所示:

ui.tabWidget->addTab(myWidget, name);

我用另一个小部件做这个操作

ui.tabWidget->addTab(myWidget2, name);

在 qt4.8 中,创建(和第一次绘制)大约需要 4 秒,之后,选项卡 1 和 2 之间的切换是瞬时的。

在 qt5 中,创建(和第一次绘制)大约需要 4 秒(就像 qt4.8 一样),但在那之后,切换选项卡在我单击选项卡和发出信号“currentChanged(int)”之间总是需要 4 秒.

与 qt4 相比,Qt5 需要添加一些缓存配置吗?

(项目相同,只是Qt版本不同)

编辑:我不使用 pixmap 而是仅使用 QPushButton* 和上面的简单文本进行相同的测试。这是同样的问题。我的 clic 和选项卡开关之间有 3/4 秒的延迟。

我查看自 qt4.8 以来 tabWidget 代码是否发生了变化,但我没有看到任何可能是导致此问题的原因。

4

1 回答 1

2

您可以通过切换到QGLWidget. Qt 中不同的“绘制设备”具有不同的性能,正如在这个问题中看到的,最快的解决方案是使用 aQGLWidget和 a QGLFramebufferObject

另外,我认为setParent(parent)不需要,QObject照顾它并QWidget继承QObject.

此外,不相关但仍然正确的术语是“更慢”而不是“更慢”。

祝你好运!

于 2013-06-24T13:33:16.967 回答