我有一个小部件,并在其中添加了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,可以显着提高性能。如this问题所示,Qt中不同的“绘画设备”具有不同的性能,最快的解决方案是将QGLWidgetQGLFramebufferObject一起使用。

另外,我认为不需要setParent(parent)QObject可以解决这个问题,QWidget继承QObject

同样,不相关但仍然正确的术语是“较慢”而不是“较慢”。

祝好运!

10-07 12:18