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

Qt5 more slow than qt4 for draw many pixmaps in TabWidget

本文关键字:绘制 许多 像素 TabWidget qt4 用于 Qt5      更新时间:2023-10-16

我有一个小部件,里面添加了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和tab开关之间有3/4秒的延迟。

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

切换到QGLWidget可以显著提高性能。Qt中不同的"油漆设备"具有不同的性能,如本问题所示,最快的解决方案是使用QGLWidgetQGLFramebufferObject

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

此外,虽然不相关,但正确的术语应该是"较慢",而不是"更慢"。

祝你好运!