Qt5比qt4更慢,用于在TabWidget中绘制许多像素图

时间:2013-06-24 10:47:25

标签: c++ performance qt

我有一个小部件,我在里面添加了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个secondes 然后,在标签1和标签2之间切换是瞬时的。

在qt5中,创作(和第一次抽奖)需要大约4个secondes(所以像qt4.8) 但在那之后,切换选项卡在我单击选项卡和信号“currentChanged(int)”emmited之间总是花费4个secondes。

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

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

编辑: 我不是用pixmap做同样的测试,而是只用QPushButton *和一个简单的文本。 这是同样的问题。 我的clic和制表符开关之间的延迟时间为3/4秒。

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

1 个答案:

答案 0 :(得分:2)

切换为QGLWidget可以显着提高效果。 Qt中的不同“绘图设备”具有不同的性能,如this问题所示,最快的解决方案是使用QGLWidgetQGLFramebufferObject

另外,我认为不需要setParent(parent)QObject负责处理,QWidget继承QObject

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

祝你好运!