"theme" 图标在 Qt Creator Designer 中如何工作?
How do "theme" icons work in Qt Creator Designer?
当我创建 "Command link button" (QCommandLinkButton
) 时,它有相对漂亮的绿色箭头图标。
我想看看我还能选择哪些漂亮的图标。当我尝试更改图标时,出现 [Theme]
而不是路径或某些 GUI 选择对话框:
我还注意到上下文菜单:
当我点击从主题设置图标时,再次期待一些 GUI 选择列表,我只得到一个文本字段:
我的想象:
从哪里获取绿色箭头的图标列表?
我认为这不是您要使用的功能。 "theme" 名称对应于 QIcon::fromTheme
功能,该功能使用根据 FDO 规范命名的图标
- http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html
- http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html
除非您部署自己的主题文件,否则非 FDO 平台(Windows、Mac、...)并不真正支持它们。
现在 一些 库存图标随 Qt 本身一起提供;我不知道如何从 Designer 中设置它们,但是您可以从代码中使用 QStyle::standardIcon
:
widget->setIcon(widget->style()->standardIcon(QStyle::SP_BrowserReload));
如果Qt 没有提供您需要的图标,您需要自己提供。在这种情况下,Resource System 是将它与您的可执行文件捆绑在一起的便捷方式。
最后但同样重要的是,从用户体验的角度来看,您应该考虑使用 QToolButton
s,除非您真的在构建类似 Vista 的向导。
QIcon::fromTheme
在特定条件下工作。
如果它可以在 QIcon::themeSearchPaths()
中找到 QIcon::themeName()
如果所需的图标不存在,Qt Designer 将无法执行任何来自主题的命名图标。
但是...如果您检查目标系统的主题搜索路径并设置主题名称,您就更有可能成功。
示例
在 linux 上,我想要一个加号和一个减号图标。
我发现 list-add.png
和 list-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
...
使用 QIcon::fromTheme
中的 fallback
图标强制
在文件系统上找到图标:
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 或 oxygen 图标桌面主题几乎总是有它...
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
希望对您有所帮助。
当我创建 "Command link button" (QCommandLinkButton
) 时,它有相对漂亮的绿色箭头图标。
我想看看我还能选择哪些漂亮的图标。当我尝试更改图标时,出现 [Theme]
而不是路径或某些 GUI 选择对话框:
我还注意到上下文菜单:
当我点击从主题设置图标时,再次期待一些 GUI 选择列表,我只得到一个文本字段:
我的想象:
从哪里获取绿色箭头的图标列表?
我认为这不是您要使用的功能。 "theme" 名称对应于 QIcon::fromTheme
功能,该功能使用根据 FDO 规范命名的图标
- http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html
- http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html
除非您部署自己的主题文件,否则非 FDO 平台(Windows、Mac、...)并不真正支持它们。
现在 一些 库存图标随 Qt 本身一起提供;我不知道如何从 Designer 中设置它们,但是您可以从代码中使用 QStyle::standardIcon
:
widget->setIcon(widget->style()->standardIcon(QStyle::SP_BrowserReload));
如果Qt 没有提供您需要的图标,您需要自己提供。在这种情况下,Resource System 是将它与您的可执行文件捆绑在一起的便捷方式。
最后但同样重要的是,从用户体验的角度来看,您应该考虑使用 QToolButton
s,除非您真的在构建类似 Vista 的向导。
QIcon::fromTheme
在特定条件下工作。
如果它可以在 QIcon::themeSearchPaths()
中找到 QIcon::themeName()
如果所需的图标不存在,Qt Designer 将无法执行任何来自主题的命名图标。
但是...如果您检查目标系统的主题搜索路径并设置主题名称,您就更有可能成功。
示例
在 linux 上,我想要一个加号和一个减号图标。
我发现 list-add.png
和 list-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
...
使用 QIcon::fromTheme
中的 fallback
图标强制
在文件系统上找到图标:
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 或 oxygen 图标桌面主题几乎总是有它...
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
希望对您有所帮助。