2014-11-08 29 views
3

我有一个基于Qt的文本编辑器程序。它的默认主题是黑暗的。我想添加一个功能,当用户选择switchtheme()的QAction时,主题应该切换为亮起,并且图标也应该根据明暗变化。在我的qrc文件中,我已经设置了如下结构:如何根据Qt C++中的主题更改图标?如果可用的主题是黑暗或光

:/images 
|--> /theme_dark/ 
|--> /theme_light/ 

两个目录中的图标文件名都保持相同。

void MainWindow::switchTheme(const QString &themeName) 
{ 
//themeName will be "light" or "dark" 

    QString image_path = ":/images/theme_"+themeName+"/"; 

    //Now maybe we can create a QStringList and append(filenames) to it. 
    //Find all QActions in the toolbar and setIcon()? 
} 

事情是黑暗的图标在黑暗的主题看起来不好,光的主题看起来不太好。我想知道如何以有效的方式做到这一点。

回答

4

您可以使用QFileSelector

QFileSelector selector; 
QStringList extraSelectors; 
extraSelectors << "theme_dark"; 
selector.setExtraSelectors(extraSelectors); 
QString image = selector.select(":/images/myImage.png"); 

QRC文件结构应该是:

:/images 
|--> /+theme_dark/ 
|-----> myImage.png 
|--> /+theme_light/ 
|-----> myImage.png 
+0

其实images /目录里面,有对工具栏图标。所以我必须单独设置 'QAction * act = qobject_cast (ui-> action_Name);' 'act-> setIcon(QIcon(image_path +“image.png”));' 有没有更快捷的方法呢?也许设置图像名称和操作名称会有所帮助? 例如,在文本编辑器中有工具栏按钮,当切换主题时,所有工具按钮也应该改变颜色。 – Bhavyanshu 2014-11-08 12:50:14

+1

@Bhavyanshu您可以使用myToolbar-> [actions()](http://qt-project.org/doc/qt-5/qwidget.html#actions)来获取所有操作。然后遍历QList 并设置图标:setIcon(QIcon(selector.select(“:/ images /”+ actionsList.at(0).title +“。png”)))。在这种情况下,图片名称必须与动作标题相同。当您修改主题时,应该更改extraSelectors并重置所有图标。 – Meefte 2014-11-08 14:44:07

+0

谢谢。得到它了! – Bhavyanshu 2014-11-08 20:26:10

相关问题