c++ - Qt5 在 TabWidget 中绘制许多像素图比 qt4 慢

标签 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 秒 之后,选项卡 1 和 2 之间的切换是即时的。

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

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

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

编辑: 我不使用像素图,而是只使用 QPushButton* 和上面的简单文本进行相同的测试。 这是同样的问题。 我的点击和标签切换之间有 3/4 秒的延迟。

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

最佳答案

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

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

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

祝你好运!

关于c++ - Qt5 在 TabWidget 中绘制许多像素图比 qt4 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17273615/

相关文章:

c++ - FFmpeg C++ api 解码 h264 错误

javascript - 减少 ui-grid 创建的 $watches 数量

html - 在 HEAD 中使用未缩小的样式还是在外部文件中使用缩小的样式性能更好?

javascript - 如何比较两段相似代码的性能?

c++ - 如何使用 QGraphicsView 的缩放级别缩放 QGraphicsEllipseItem

c++ - 具有多个参数的绑定(bind)函数导致 C2027

c++ - 编译器错误说从某物类型的表达式中对某物类型的引用进行了无效初始化*

qt - 可以将 QToolbar 添加到 QDockWidget 吗?

qt - 解决 QML 导入中的资源歧义

c++ - CMake 错误 : linker command failed with exit code 1 and cpp. o 文件