如何在 Qt C++ 中根据主题更改图标?如果可用的主题是深色或浅色
Posted
技术标签:
【中文标题】如何在 Qt C++ 中根据主题更改图标?如果可用的主题是深色或浅色【英文标题】:How to change icons based on theme in Qt C++? If available themes are dark or light 【发布时间】:2014-11-08 08:40:23 【问题描述】:我有一个基于 Qt 的文本编辑器程序。它的默认主题是黑暗的。我想添加一个功能,当用户为 switchtheme() 选择 QAction 时,主题应该切换为亮,图标也应该根据亮/暗而变化。在我的 qrc 文件中,我设置了如下结构
:/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()?
问题是深色图标在深色主题上看起来不太好,而浅色图标在浅色主题上看起来不太好。我想知道如何以有效的方式做到这一点。
【问题讨论】:
【参考方案1】:你可以使用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
【讨论】:
其实在images/目录里面,有工具栏的图标。所以我必须单独设置QAction *act = qobject_cast<QAction*>(ui->action_Name);
act->setIcon(QIcon(image_path+"image.png"));
有没有更快的方法呢?也许设置图像名称和动作名称会有所帮助?例如,在文本编辑器中有工具栏按钮,当切换主题时,所有工具按钮也应该改变颜色。
@Bhavyanshu 您可以使用 myToolbar->actions() 获取所有操作。然后遍历 QList以上是关于如何在 Qt C++ 中根据主题更改图标?如果可用的主题是深色或浅色的主要内容,如果未能解决你的问题,请参考以下文章
WP7:了解暗/亮图标以及如何根据它们动态更改(通过mvvmlight)?
(Qt C++) QPushButton setIcon() 不工作