我正在开发自己的MessageBox,因为我需要以下功能:
File
标准消息框不支持。但是我想尽可能地将其看作原始消息框。因此,我想重复显示消息框时可以找到的相同图标集。
有没有办法检索这个像素图,以便我可以使用它?类似的东西:
Do not display this message next time
答案 0 :(得分:1)
使用QStyle::standardIcon
尝试QStyle::SP_MessageBoxQuestion
。
您可以从当前QWidget
或QApplication
获取样式。
答案 1 :(得分:1)
这似乎有效:
这是获取消息框pixmap的原始源代码(内部Qt实现):
QPixmap QMessageBoxPrivate::standardIcon(QMessageBox::Icon icon, QMessageBox *mb)
{
QStyle *style = mb ? mb->style() : QApplication::style();
int iconSize = style->pixelMetric(QStyle::PM_MessageBoxIconSize, 0, mb);
QIcon tmpIcon;
switch (icon) {
case QMessageBox::Information:
tmpIcon = style->standardIcon(QStyle::SP_MessageBoxInformation, 0, mb);
break;
case QMessageBox::Warning:
tmpIcon = style->standardIcon(QStyle::SP_MessageBoxWarning, 0, mb);
break;
case QMessageBox::Critical:
tmpIcon = style->standardIcon(QStyle::SP_MessageBoxCritical, 0, mb);
break;
case QMessageBox::Question:
tmpIcon = style->standardIcon(QStyle::SP_MessageBoxQuestion, 0, mb);
default:
break;
}
if (!tmpIcon.isNull())
return tmpIcon.pixmap(iconSize, iconSize);
return QPixmap();
}
创建一个类似的函数提供了一种获取所有这些消息框样式的像素映射的方法。
来源:http://www.qtcentre.org/threads/37395-Getting-the-Icon-of-a-MessageBox
答案 2 :(得分:1)
尽管这是一个老问题,但我为那些寻求答案的人找到了一个简单的解决方案。
在您的自定义类中创建一个qLabel,然后在该类的构造函数中创建具有所需样式的QIcon,将其转换为像素图,然后使用QLabel :: setPixmap()函数将其应用于您所需要的样式已创建:
QIcon icon = style()->standardIcon(QStyle::SP_MessageBoxWarning); //or
//whatever icon you choose
QPixmap pixmap = icon.pixmap(QSize(60, 60));
ui->iconLabel->setPixmap(pixmap);
ui->iconLabel->setScaledContents(true); //you can set this to fill the
//dimensions of your qLabel if you wish.