在Qt4中显示标准警告图标

时间:2010-12-15 19:23:26

标签: qt coding-style icons

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

在Qt中显示“标准”警告图标的首选方法是什么?是否存在一些列表,显示每种风格中包含哪些图标?如何从我知道的样式中获取包含警告图标的图标?

3 个答案:

答案 0 :(得分:9)

上次遇到类似问题时,我发现this Qt labs discussion很有用。它通知我QIcon现在(我认为4.6)有一个QIcon::fromTheme功能,允许您加载基于the Freedesktop.org Icon Naming Specification的图标,另外还提供一个后备图标,如果当前主题没有相关图标。

我所做的就是包含一些非常基本的图标用作后备,一般只用Freedesktop名称指定图标。这几乎总是给出了一个主题一致的外观,并且该程序仍然适用于人们缺少图标的情况。

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

我希望这会有所帮助。

编辑:哦,如果您不知道,查看例如Tango icon set以大致了解Freedesktop名称对应的内容会很有用(虽然它当然是主题依赖的)。

答案 1 :(得分:5)

Qt确实bundle a number of images是您可以在自己的代码中使用的资源。这些图片是通过standardIcon()提供的图片的超集。您可能需要验证特定图片是否包含在您要定位的Qt版本中。

最终结果可能如下所示:

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

答案 2 :(得分:1)

对于任何想知道如何在Windows环境中执行此操作的人,您都可以:

在您的自定义类中创建一个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.
相关问题