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()?
}
事情是黑暗的图标在黑暗的主题看起来不好,光的主题看起来不太好。我想知道如何以有效的方式做到这一点。
其实images /目录里面,有对工具栏图标。所以我必须单独设置 'QAction * act = qobject_cast(ui-> action_Name);' 'act-> setIcon(QIcon(image_path +“image.png”));' 有没有更快捷的方法呢?也许设置图像名称和操作名称会有所帮助? 例如,在文本编辑器中有工具栏按钮,当切换主题时,所有工具按钮也应该改变颜色。 –
Bhavyanshu
2014-11-08 12:50:14
@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
谢谢。得到它了! – Bhavyanshu 2014-11-08 20:26:10