绘制QPixmap的QPainter或QLabel成本较低

时间:2015-02-26 09:09:17

标签: c++ qt qpainter qpixmap qlabel

我必须创建一个Icon pixmap,这是我熟悉的两种方法,一种是将pixmap设置为o QLabel并显示它,另一种是使用QPainter绘制pixmap,即< / p>

方法一

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个图标的数量,以便哪一个有效, 提前谢谢,

2 个答案:

答案 0 :(得分:4)

从理论角度来看,QPainter方法会更快,因为QLabel引入的开销可以避免。内部QLabel也需要使用QPainter(使用drawPicture())。

然而,这种差异是否会使您的应用程序更具响应性是值得怀疑的。我怀疑这种优化是否会引人注意。

我建议首先考虑代码的可读性,并采取更容易/感觉更好的方法。

一旦您具备了功能并且存在性能问题,您就可以开始进行分析并确定优化投入的时间和精力在哪里。

答案 1 :(得分:1)

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