繁体   English   中英

QPainter或QLabel绘制QPixmap的成本较低

[英]QPainter or QLabel is less costly to draw QPixmap

我必须创建一个Icon像素图,我熟悉两种方法来做到这一点,一种是将像素图设置为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);
}

方法2

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

我必须绘制多个图标,数量超过100个,所以哪个是有效的,在此先感谢,

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

但是,是否存在这种差异是否会使您的应用程序具有更高的响应能力值得怀疑。 我怀疑这种优化是否会引人注目。

我建议首先注意代码的可读性,并选择更容易使用的感觉。

一旦具备了适当的功能并且出现了性能问题,就可以开始进行性能分析,并确定最佳的投入时间和精力。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM