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 版本)。
我必须创建一个图标像素图,我熟悉两种方法,一种是将像素图设置为 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 版本)。