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

Tom*_*ica 11 qt qt-creator qt-designer

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

图片描述

我想看看我能选择哪些其他漂亮的图标.当我尝试更改图标时,[Theme]显示而不是路径或某些GUI选择对话框:

图片描述

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

图片描述

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

图片描述

我在想什么:

图片描述

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

pep*_*ppe 6

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

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


现在,Qt 本身附带了一些库存图标;我不知道如何从 Designer 设置它们,但是从您可以使用的代码中QStyle::standardIcon

 widget->setIcon(widget->style()->standardIcon(QStyle::SP_BrowserReload));
Run Code Online (Sandbox Code Playgroud)

如果您需要的图标不是由 Qt 提供的,您需要发送它。在这种情况下,资源系统是一种将其与可执行文件捆绑在一起的便捷方式。


最后但并非最不重要的是,从 UX 的角度来看,QToolButton除非您真的要构建类似 Vista 的向导,否则您应该考虑使用s。


phy*_*att 6

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
...
Run Code Online (Sandbox Code Playgroud)

fallback图标强制QIcon::fromTheme

在文件系统上找到图标:

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

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

ui->toolButton->setIcon(QIcon::fromTheme("list-add",
    QIcon(":/list-add.png")));
Run Code Online (Sandbox Code Playgroud)

覆盖当前的图标主题

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

// themeSearchPaths: ("/usr/local/share/icons", "/usr/share/icons", ":/icons") "hicolor"
Run Code Online (Sandbox Code Playgroud)

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

QIcon::setThemeName("oxygen");
Run Code Online (Sandbox Code Playgroud)

请注意,您不一定会在 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));
Run Code Online (Sandbox Code Playgroud)

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

希望有帮助。