主题图标仅在Linux/X11上受支持。在Windows和OS X上,您必须提供自己的图标。
解决此问题的方法是在QtCreator中设置主题名称(如您的示例中所示)。然后,在资源中以相同别名提供前缀“:/icons”下的图标。您可以利用公共领域中可用的图标集,例如流行的Tango图标集。
如果您只针对Windows平台,则主题设置对您无用。如果您同时针对Linux/X11和其他平台,则使用此解决方案可在一个系统上获得本机图标,并在其他平台上提供您自己的图标。
您可以在此处找到有关如何执行此操作的非常好的解释: http://mithatkonar.com/wiki/doku.php/qt/icons
@ypnos提供了一个解决问题的多种方法的链接。我最喜欢的是最后一个 - 创建自定义图标主题。作者列出了三个优点 (适用于所有平台, 可调整大小, 涵盖所有所需图标) 和两个缺点 (与系统图标主题不一致, 实现起来很麻烦)。 在这里,我建议改进以消除缺点。
我从github克隆了Tango图标集。仓库https://github.com/ppinard/qtango已经拥有index.theme文件。但主要是它带来了一个Python脚本generate_rcc.py
,可以自动生成*.qrc
文件。我只需要将subprocess.check_call()
的参数从'--binary'
和'--compress'
更改为'-binary'
和'-compress'
。生成的文件包含绝对路径,但这很容易通过查找和替换来解决。可以使用此脚本到任何图标集 - 第一步是艰苦的。
现在,使用“Theme”属性,您可以在Qt Designer中定义图标,如问题中所示。对于在Linux下开发的人,系统图标将在Designer中正确显示(假设图标集使用标准图标名称)。这是本地外观(图标将在您的系统设置中配置)。这使您免于编写ui->action_Open->setIcon(...)
。
最后的调整是在ui设置之前设置主题。
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
#ifdef _WIN32
QIcon::setThemeName("tango");
#endif
ui = new Ui::MainWindow;
ui->setupUi(this);
...
// NO NEED FOR ui->action_Open->setIcon(...)
}
#ifdef
可以根据需要调整以针对所有所需平台,或省略以强制在包括Linux在内的所有平台上使用相同的图标。
因此,此方法避免了冗长的编码,并且其结果至少在Linux上与系统图标一致。很遗憾,Qt Designer 中的这个图标主题选项在 Windows 上不可用。