在Qt4中显示标准警告图标

在Qt4中显示标准警告图标,qt,coding-style,icons,Qt,Coding Style,Icons,我试图在QLineEdit旁边显示一个“警告”图标,如果它包含无效数据我试图使用QStyle::standardIcon(QStyle::SP_MessageBoxWarning)获取一个标准的pixmap,并将其放置在QLabel中,在某些情况下,这似乎是可行的。运行Gnome时,图标会正确显示,但在KDE下运行时,不会显示任何图标。我假设在KDE下使用的样式中没有包含警告图标 在Qt中显示“标准”警告图标的首选方式是什么?是否存在显示每个样式中包含哪些图标的列表?如何从包含警告图标的样式中获

我试图在
QLineEdit
旁边显示一个“警告”图标,如果它包含无效数据
我试图使用
QStyle::standardIcon(QStyle::SP_MessageBoxWarning)
获取一个标准的pixmap,并将其放置在
QLabel
中,在某些情况下,这似乎是可行的。运行Gnome时,图标会正确显示,但在KDE下运行时,不会显示任何图标。我假设在KDE下使用的样式中没有包含警告图标


在Qt中显示“标准”警告图标的首选方式是什么?是否存在显示每个样式中包含哪些图标的列表?如何从包含警告图标的样式中获取图标?

上次我遇到类似问题时,我发现它很有用。它告诉我,现在(我相信从4.6开始)有一个
QIcon::fromTheme
函数,允许您根据加载图标,此外,如果当前主题没有相关图标,还可以提供备用图标

我所做的是包括一些非常基本的图标作为备用,并且通常只通过它们的Freedesktop名称来指定图标。这给了一个主题一致的外观几乎总是,该计划仍然在工作的情况下,人们失踪的图标

至于警告图标,我猜/希望每个主题都必须有一个名为“对话警告”的图标,而这正是您所寻找的

我希望这有帮助

编辑:哦,如果你不知道的话,可以看看这个例子,大致了解Freedesktop名称对应的是什么(尽管它当然取决于主题)。

Qt做的是你可以在自己的代码中使用的资源。这些图像是通过
standardIcon()
提供的图像的超集。您可能需要验证特定图像是否包含在目标的Qt版本中

最终结果可能如下所示:

QPixmap pixmap(":/trolltech/styles/commonstyle/images/up-128.png");
// use pixmap as needed

对于希望了解如何在Windows环境中执行此操作的任何人,您可以:

在自定义类中创建qLabel,然后在该类的构造函数中创建具有所需样式的QIcon,将其转换为pixmap,并使用qLabel::setPixmap()函数将其应用于所创建的QIcon:

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.

有趣。我可以想象,这对于为
QIcon::fromTheme
提供回退非常有用。