QPainter 或 QLabel 绘制 QPixmap 成本更低

QPainter or QLabel is less costly to draw QPixmap

我必须创建一个图标像素图,我熟悉两种方法,一种是将像素图设置为 o QLabel 并显示它,另一种是使用 QPainter 绘制像素图,即

方法一

Icon::Icon
{
    QLabel iconLab = new QLabel;
    QLabel iconName = new QLabel;
    iconLab->setPixmap("mypixmap.png"); 
    iconName->setText("myiconname");
    QVBoxLayout *iconLayout = new QVBoxLayout; 
    iconLayout->setMargin(0);
    iconLayout->addWidget(iconLab, 1, Qt::AlignCenter);
    iconLayout->addWidget(iconName, 1, Qt::AlignCenter);
    iconLayout->setSpacing(0);

    setLayout(iconLayout);
    setMaximumSize(100,160);
    setMinimumSize(100,160);
}

方法二,

Icon::Icon
{     
    setMaximumSize(100,160);
    setMinimumSize(100,160);
}
Icon::paintEvent(QPaintEvent*)
{      
    QPainter painter;
    painter.drawPixmap(0,0,myPixmap);
    painter.drawText(0,100,myText)
}

我要画几个图标,100多个,哪一个有效, 提前致谢,

从理论上讲,QPainter 方法会更快,因为避免了 QLabel 引入的开销。在内部 QLabel 也需要使用 QPainter(使用 drawPicture())。

但是,这种差异是否会使您的应用程序响应更快,这是值得怀疑的。我怀疑这种优化是否会引人注目。

我建议首先关注代码的可读性,然后选择使用起来更容易/感觉更好的东西。

一旦功能就位但出现性能问题,您就可以开始分析并决定优化时间和精力的最佳投入。

如果您必须绘制超过 100 个,这通常意味着您不应使用这些解决方案中的任何一个。
很可能 QListView 使用自定义委托和 QAbstractListModel 来保存这些图像是你真正需要的(或 table 版本)。