如何在 Qt C++ 中根据主题更改图标?如果可用的主题是深色或浅色

     2023-03-29     226

关键词:

【中文标题】如何在 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&lt;QAction*&gt;(ui-&gt;action_Name); act-&gt;setIcon(QIcon(image_path+"image.png")); 有没有更快的方法呢?也许设置图像名称和动作名称会有所帮助?例如,在文本编辑器中有工具栏按钮,当切换主题时,所有工具按钮也应该改变颜色。 @Bhavyanshu 您可以使用 myToolbar->actions() 获取所有操作。然后遍历 QList 并设置图标:setIcon(QIcon(selector.select(":/images/"+actionsList.at(0).title+".png")))。在这种情况下,图像名称必须与动作标题相同。切换主题时,您应该更改 extraSelectors 并重置所有图标。

如何根据主题更改状态栏/导航栏颜色/亮度?

】如何根据主题更改状态栏/导航栏颜色/亮度?【英文标题】:Howtochangestatusbar/navigationbarcolor/brightnesswithrespectivetotheme?【发布时间】:2022-01-2002:58:27【问题描述】:使用Getx进行主题化,但在根据浅色/深色主题更改状态栏图标亮... 查看详情

根据主题更改 Drawable

】根据主题更改Drawable【英文标题】:ChangeDrawableBasedonTheme【发布时间】:2012-11-2400:19:10【问题描述】:我有两种不同颜色的图像,对应于Android中的两个不同主题。我想在我的操作栏中使用它们。我想为图标引用可绘制对象,与... 查看详情

(Qt C++) QPushButton setIcon() 不工作

...项目在一组中有40个可检查按钮,我希望一个按钮的图标根据我定义的值进行更改。我没有创建新按钮,只是更改当前按钮的图标。所以我尝试改变一个按钮的图标来测试它。这是我当前的代码:QPixmapb1d0(":/ 查看详情

如何更改我的 C++ 代码以使其在 C 中可用?

】如何更改我的C++代码以使其在C中可用?【英文标题】:HowcanIchangemyC++codetomakeitusableinC?【发布时间】:2013-04-1723:34:57【问题描述】:我似乎遇到了问题。我正在尝试在c代码中使用c++函数。我试过这些方法http://www.olivierlanglois.net... 查看详情

Qt应用不同的图标主题

】Qt应用不同的图标主题【英文标题】:Qtapplicationdifferenticontheme【发布时间】:2014-04-0918:19:02【问题描述】:我使用Java和QtJambi(Qt4.6.3)库开发了一个文本编辑器。该应用程序有一个QToolBar,其中包含一些带有图标的QAction。我的文... 查看详情

如果传递给 QGraphicsRectItem Qt c++,则更改光标

】如果传递给QGraphicsRectItemQtc++,则更改光标【英文标题】:ChangethecursorifyoupasstoaQGraphicsRectItemQtc++【发布时间】:2018-07-1309:55:02【问题描述】:如果我越过像QGraphicsRectItem这样的矩形,我想更改光标。我有一个继承自QGraphicsView的... 查看详情

Qt:如何在 C++ 端而不是 QML 上监视 Q_PROPERTY 更改

】Qt:如何在C++端而不是QML上监视Q_PROPERTY更改【英文标题】:Qt:HowtomonitoraQ_PROPERTYchangeonC++sideinsteadofQML【发布时间】:2018-02-1517:28:18【问题描述】:我使用的是Qt5.9.3。我在我的应用程序的main.qml中声明了以下属性代码://main.qmlMyQ... 查看详情

如何在 C++ 中制作图标按钮

】如何在C++中制作图标按钮【英文标题】:HowtomakeaniconbuttoninC++【发布时间】:2009-03-1100:50:24【问题描述】:我知道如何在C++中绘制一个按钮,但是我将如何在其上制作一个图标,有人可以发布源代码或提供参考吗?通过SendMessag... 查看详情

如何根据模型值在 Django 管理图标中显示

】如何根据模型值在Django管理图标中显示【英文标题】:HowtoshowinDjangoAdminIconsbasedonmodelvalue【发布时间】:2021-12-0815:54:23【问题描述】:我需要在列表中的DjangoAdmin中显示一个图标,并根据该值更改视图。例如:如果模型字段event... 查看详情

Qt - 如何在拖动项目时显示图像/图标/数据?

】Qt-如何在拖动项目时显示图像/图标/数据?【英文标题】:Qt-Howtoshowimage/icon/datawhiledragginganitem?【发布时间】:2018-05-1018:40:41【问题描述】:我有一个应用程序,我可以将一个项目拖到QGraphicsScene并根据项目文本创建一个新对象... 查看详情

如何在 C++ 中使用 fastNlMeansDenoisingColored()?

】如何在C++中使用fastNlMeansDenoisingColored()?【英文标题】:HowcanIusefastNlMeansDenoisingColored()inC++?【发布时间】:2016-11-1923:45:57【问题描述】:我是学习OpenCV的新手。当我在寻找去除噪音的好算法时,我发现了这个函数,但我不知道... 查看详情

如何使用 QPushButton 的系统主题图标——Linux 上的 Qt Designer

】如何使用QPushButton的系统主题图标——Linux上的QtDesigner【英文标题】:HowtousesystemthemeIconforQPushButton--QtDesigneronLinux【发布时间】:2011-07-1423:40:44【问题描述】:如何在QtDesigner中为新创建的QtPushButton使用默认的Qt图标?【问题讨... 查看详情

如何在 Flutter 中通过更改主题来更改文本颜色

】如何在Flutter中通过更改主题来更改文本颜色【英文标题】:HowtochangetheTextcolorwithchangeofthemeinFlutter【发布时间】:2020-03-1912:22:57【问题描述】:我正在开发一个应用程序,它会根据系统的主题更改其主题数据,即如果用户为他... 查看详情

如何在新材质主题中更改后退箭头的颜色?

】如何在新材质主题中更改后退箭头的颜色?【英文标题】:Howtochangecolorofthebackarrowinthenewmaterialtheme?【发布时间】:2015-01-0311:46:14【问题描述】:我已将我的SDK更新到API21,现在备份/后退图标是一个指向左侧的黑色箭头。我希... 查看详情

在 C++ 中使用 windows api 更改窗口图标 [重复]

】在C++中使用windowsapi更改窗口图标[重复]【英文标题】:ChangingWindowiconusingthewindowsapiinC++[duplicate]【发布时间】:2020-10-0217:52:38【问题描述】:我正在尝试更改窗口图标,但是main.cpp(hIcon!=0)中的断言总是失败,我在项目解决方案... 查看详情

如何在mac上更改keynote讲演主题?

如何在Mac上更改Keynote讲演主题?您可以随时更改演示文稿的主题。您现有的幻灯片继承新主题的属性,其中包括对象样式、标题样式等。如果自定了幻灯片上的任何属性,例如,更改幻灯片背景或文本颜色,那么您可以选取保... 查看详情

如何在qt中显示闪烁的[动画]红色/绿色状态图标

】如何在qt中显示闪烁的[动画]红色/绿色状态图标【英文标题】:Howtodisplayblinking[animate]red/greenstatusiconinqt【发布时间】:2016-05-0308:40:52【问题描述】:我想在QtC++应用程序中显示红色动画闪烁图标。设置变量时显示红色闪烁图标... 查看详情

如何根据 web 的新主题使用大纲物化图标?

】如何根据web的新主题使用大纲物化图标?【英文标题】:Howtouseoutlinematerializeiconsaccordingtonewthemeforweb?【发布时间】:2018-11-0623:50:54【问题描述】:Materialize将图标分为五种格式:-圆角、填充、轮廓、双音、锐利。下面是链接htt... 查看详情