关于c ++:QPainter或QLabel绘制QPixmap的成本较低

QPainter or QLabel is less costly to draw QPixmap

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

方法一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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);
}

方法2

1
2
3
4
5
6
7
8
9
10
11
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是您真正需要的(或表版本)。