2012-09-06 111 views
15

我想使用Qt标准图标(as here)。我已经找到了很多例子如何set the icons programmatically(代码运行时)。从Qt Creator中使用Qt标准图标

但是,如何在Qt Creator中设置“标准图标名称”(例如 application-exit)?这 blog here说,我只是将主题设置为相应的名称。但我没有这样的主题属性,我会得到一个资源弹窗(截图如下)。

哪里是适用“标准名称”(例如 application-exit)的正确位置?

从2.4.x更新到Qt Creator 2.5.2从上面的博客给我的“主题”属性,但仍然没有可见的图标呢。 还需要什么才能使图标可见?

Theme now available with Creator 2.5.2

备注的Qt 4.8.1,现在已经更新到2.5.2,Windows 7的

回答

12

主题图标仅在Linux/X11上受支持。在Windows和OS X上,你必须提供你自己的图标。

此问题的解决方案是在QtCreator中设置主题名称(如您的示例中所示)。然后,您必须在资源中的前缀“:/图标”下提供相同别名的图标。您可以利用公共领域中可用的图标,例如流行的探戈图标集。

如果您只定位Windows平台,则主题设置对您无用。如果您将Linux/X11和其他平台作为目标,则使用此解决方案,您可以在一个系统上获得本机图标,并在其他系统上获得您自己提供的图标。

你可以找到如何在这里做了很好的解释: http://mithatkonar.com/wiki/doku.php/qt/icons

+1

在其他操作系统中,工具栏上有相当大的标准图标等等,并且有图标主题。例如:http://commons.wikimedia.org/wiki/Tango_icons http://gnome-look.org/content/show.php/?content=122078正如你所看到的,这是一个相当不错的概念,因为所有的应用程序使用这些标准图标很适合任何桌面环境,也可以由用户自定义。 – ypnos

+0

请注意,我以前的评论是对现已删除评论的回复。对困惑感到抱歉。 – ypnos

0

不幸的是,通过Qt设计图标主题的这个选项不可用在Windows上。

+0

你的意思是它不适用于Windows?因为 - 如上面的屏幕截图所示 - 可以设置主题。不可用对我来说意味着该选项根本不可用。这是否被认为是一个错误,或者这是Qt团队的设计决定?任何参考提供更多的细节? –

1

@ypnos建议用多种方法有很大的联系,以解决问题。我最喜欢最后一个 - Creating a custom icon theme。笔者指出三票赞成(适用于所有平台优异调整涵盖所有需要的图标),和两个缺点(与系统的图标主题并不一致,疼痛的屁股实施)。 在这里我建议改进以摆脱缺点。

我已经从github克隆了Tango iconset。版本库https://github.com/ppinard/qtango已具有index.theme文件。但主要是它带来了一个Python脚本generate_rcc.py,它可以自动生成*.qrc文件。我只需将subprocess.check_call()的参数从'--binary''--compress'更改为'-binary''-compress'。生成的文件包含绝对路径,但很容易找到&替换。人们可以将这个脚本用于任何iconset - 第一个艰难的步骤就解决了。

现在,使用“Theme”属性,您可以在Qt Designer中定义图标,正如问题中所示。对于在Linux下开发的人员,系统图标将在设计器中显示(假设iconset使用标准图标名称)。这是原生的外观(图标可以在您的系统设置中配置)。这可以让您摆脱ui->action_Open->setIcon(...)编码。

最后的调整是设置主题之前用户界面设置。

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上与系统图标一致。