我正在尝试实现类似于带有附加功能的错误消息框的对话框。在QMessageBox.Critical
中使用QMessageBox
时,我想绘制系统提供的相同位图。
在wxPython中我会这样做:
self.error_bitmap = wx.ArtProvider.GetBitmap(wx.ART_ERROR, wx.ART_MESSAGE_BOX)
self.error_bitmap_ctrl = wx.StaticBitmap(self)
self.error_bitmap_ctrl.SetBitmap(self.error_bitmap)
我在Qt中寻找类似的东西。我尝试使用QStyle.SP_MessageBoxCritical
或QIcon.fromTheme("dialog-error")
,但没有成功。我似乎无法理解类结构来获取一些我实际上可以放在QLabel
旁边的窗口的小部件。
答案 0 :(得分:3)
Qt使用的各种内置图标可以通过QStyle.standardIcon方法检索。
QMessageBox
类还有一个方法来提取每个QMessageBox.Icon的像素图,但它不是公共API的一部分。这是它的PyQt / PySide端口:
def messageBoxIcon(mbicon, widget=None):
if widget is not None:
style = widget.style()
else:
style = QtGui.QApplication.style()
size = style.pixelMetric(
QtGui.QStyle.PM_MessageBoxIconSize, None, widget)
if mbicon == QtGui.QMessageBox.Information:
icon = style.standardIcon(
QtGui.QStyle.SP_MessageBoxInformation, None, widget)
elif mbicon == QtGui.QMessageBox.Warning:
icon = style.standardIcon(
QtGui.QStyle.SP_MessageBoxWarning, None, widget)
elif mbicon == QtGui.QMessageBox.Critical:
icon = style.standardIcon(
QtGui.QStyle.SP_MessageBoxCritical, None, widget)
elif mbicon == QtGui.QMessageBox.Question:
icon = style.standardIcon(
QtGui.QStyle.SP_MessageBoxQuestion, None, widget)
else:
icon = QtGui.QIcon()
if not icon.isNull():
return icon.pixmap(size, size)
return QtGui.QPixmap()