“主题”图标在Qt Creator Designer中如何运作?

时间:2015-12-22 14:02:18

标签: qt qt-creator qt-designer

当我创建“命令链接按钮”(QCommandLinkButton)时,它有一个相对漂亮的绿色箭头图标。

image description

我想看看我可以选择哪些其他漂亮的图标。当我尝试更改图标时,会出现[Theme]而不是路径或某些GUI选择对话框:

image description

我也注意到了上下文菜单:

image description

当我点击从主题设置图标时,再次期待一些GUI选择列表,我只得到一个文本字段:

image description

我在想什么:

image description

绿色箭头所在的图标列表在哪里?

2 个答案:

答案 0 :(得分:3)

我认为这不是你想要使用的功能。那里的“主题”名称对应QIcon::fromTheme功能,它使用根据FDO规范命名的图标

除非您部署自己的主题文件,否则他们在非FDO平台(Windows,Mac,...)上并不受支持。

现在一些股票图标随Qt一起发货;我不知道如何从Designer设置它们,但是从代码中可以使用QStyle::standardIcon

 widget->setIcon(widget->style()->standardIcon(QStyle::SP_BrowserReload));

如果Qt不提供您需要的图标,则需要发货。在这种情况下,Resource System是将它与可执行文件捆绑在一起的便捷方式。

最后但并非最不重要的是,从用户体验的角度来看,除非你真的在构建类似Vista的向导,否则你应该考虑使用QToolButton

答案 1 :(得分:3)

QIcon::fromTheme在特定条件下工作。

如果可以在QIcon::themeSearchPaths()

QIcon::themeName()中找到它

如果没有所需的图标,Qt Designer将无法执行任何主题,命名图标。

但是......如果你检查目标系统的主题搜索路径并设置主题名称,你就更有可能获得成功。

实施例

在linux上,我想得到一个加号和一个减号图标。

我发现list-add.pnglist-remove.png适合该帐单。

https://github.com/GNOME/adwaita-icon-theme/tree/master/Adwaita/16x16/actions

http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html

我在我的系统上找到了一个找到它们的位置:

/usr/share/icons/gnome/16x16/actions/list-add.png
...
/usr/share/icons/gnome/32x32/actions/list-add.png
/usr/share/icons/gnome/scalable/actions/list-add.svg
/usr/share/icons/oxygen/16x16/actions/list-add.png
...

强制使用fallback

中的QIcon::fromTheme图标

在文件系统上找到图标:

ui->toolButton->setIcon(QIcon::fromTheme("list-add",
    QIcon("/usr/share/icons/gnome/16x16/actions/list-add.png")));

在qt资源系统中找到图标... 在构建中的qrc文件中添加图标,然后引用它的路径。

ui->toolButton->setIcon(QIcon::fromTheme("list-add",
    QIcon(":/list-add.png")));

覆盖当前图标主题

qDebug() << "themeSearchPaths:" << QIcon::themeSearchPaths() << QIcon::themeName();

// themeSearchPaths: ("/usr/local/share/icons", "/usr/share/icons", ":/icons") "hicolor"

系统和目标部署机器的默认主题可能没有我想要的图标......但安装的gnome或氧气图标桌面主题几乎总是有它...

QIcon::setThemeName("oxygen");

请注意,您不会在Qt Designer中看到预览,因为它直到您的代码运行时才设置主题。

gnome图标库中有1100多个图标。这是一个清单:

https://gist.github.com/peteristhegreat/c0ca6e1a57e5d4b9cd0bb1d7b3be1d6a

只要您知道目标系统上可用的主题,就可以使用。

freedesktop.org的列表中列出了286个图标。

使用Qt

中包含的图标

就像@peppe指出的那样,Qt也包括70个标准图标。

widget->setIcon(widget->style()->standardIcon(QStyle::SP_BrowserReload));

http://doc.qt.io/qt-5/qstyle.html#StandardPixmap-enum

结论

在目标系统上使用库存库可能是最快的。使用Qt内置函数很快就能搞清楚并使用,但相当有限。使用资源文件可能是最强大的方法,并且可以无限制地选择要使用的图标。

请务必选择标准图标包,并考虑许可和归因以及其他类似内容。

网上有不少图标:

https://www.quora.com/What-is-the-best-icon-library

https://www.google.com/search?q=open+source+icon+library

希望有所帮助。