Qt应用不同的图标主题

     2023-03-29     63

关键词:

【中文标题】Qt应用不同的图标主题【英文标题】:Qt application different icon theme 【发布时间】:2014-04-09 18:19:02 【问题描述】:

我使用 Java 和 QtJambi (Qt 4.6.3) 库开发了一个文本编辑器。该应用程序有一个 QToolBar,其中包含一些带有图标的 QAction。我的文本编辑器可以在两个主题(深色和浅色)之间切换。如果我使用黑色图标,深色主题看起来很糟糕,如果我使用白色图标,浅色主题看起来也很糟糕。当我按下切换主题按钮时,我想更改图标。

图标声明如下:

private String inir = "classpath:/ico/";
private QIcon iconodeshacer = new QIcon(inir+"deshacer.png");

我以这种方式将它们设置为 QActions:

private QToolBar herramientas = new QToolBar();
herramientas.addAction(iconodeshacer, "Deshacer", this, "deshacer()");

我已尝试更改 inir 字符串并应用:

herramientas.update();
herramientas.repaint();

我找不到 QtJambi 或常规 Qt 的解决方案(我可以从中翻译)。

我想声明两个图标主题并应用它们,而不必在配置之外声明每个 QAction 并使用 setIcon() 手动更改图标;

【问题讨论】:

【参考方案1】:

您可以实现switchTheme 函数并在每次要更改主题时调用它。在此功能中,您应该加载必要的图标。

class ActionManager : public QObject // Singleton

//...
QMap< QAction *, QString > allActions;

public:

  void registerAction( const QString& key, QAction *action )
  
    allActions[action] = key;
    connect( action, &QObject::destroyed, this, &ActionManager::onActionDelete );
  

  void switchTheme( const QString& themeName )
  
    for ( QMap< QAction *, QString >::iterator i = allActions.begin(); i != allActions.end(); i++ )
    
      const QString iconPath = QString( ":/icons/theme_%1/%2.ico").arg( themeName ).arg( i.value() );
      i.key()->setIcon( iconPath );
    
  

private slots:
  void onActionDelete()
  
    QAction *act = qobject_cast<QAction *>( sender() );
    allActions.remove( act );
  

;

//Usage:
QAction *saveAction = new QAction();
ActionManager::instance()->registerAction( act, "saveicon" );

//On applying theme:
ActionManager::instance()->switchTheme( "light ");
// Will load ":/icons/theme_light/saveicon.ico" for saveAction

【讨论】:

【参考方案2】:

感谢 Dmitry Sazonov 给我一个想法。由于我在 java 上编程,而不是 c++,它的代码很难应用于我的应用程序。但我理解了这个想法。我所做的是将图标名称存储在字符串数组中,并在每次切换主题时重置元素的图标。

private String[] nombreiconoseditar = "copiar.png", "cortar.png", "pegar.png", "", "deshacer.png", "rehacer.png", "", "buscar.png", "buscareemplazar.png";

我将路由更改为图标文件夹,并在我想要的元素中一一设置图标,在此示例中,我更改了 QMenu 编辑器上的所有图标。

inir="classpath:/ico/claro/";

List ed = editar.actions();
    for(int i=0; i<ed.size(); i++)
    
        QAction tmp = (QAction) ed.get(i);
        tmp.setIcon(new QPixmap(inir+nombreiconoseditar[i]));
    

希望这可以帮助遇到同样问题的人!

【讨论】:

如何在跳转开始列表和任务栏中为不同的主题显示不同的应用程序图标?

...如何在跳转开始列表和任务栏中为不同的主题显示不同的应用程序图标?【英文标题】:Howtoshowdifferentappiconinjumpstartlist&taskbarfordifferentthemes?【发布时间】:2021-04-2300:39:03【问题描述】:我正在开发一个UWP应用。当我从2004版升... 查看详情

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

】如何在QtC++中根据主题更改图标?如果可用的主题是深色或浅色【英文标题】:HowtochangeiconsbasedonthemeinQtC++?Ifavailablethemesaredarkorlight【发布时间】:2014-11-0808:40:23【问题描述】:我有一个基于Qt的文本编辑器程序。它的默认主题... 查看详情

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

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

Qt:有没有办法让工具栏图标适应系统主题?

】Qt:有没有办法让工具栏图标适应系统主题?【英文标题】:Qt:isthereanywaytoadapttoolbariconstosystemtheme?【发布时间】:2015-11-1014:42:51【问题描述】:我的程序的一位用户最近报告了在使用深色系统主题时UI出现问题。大多数问题是... 查看详情

qml工程化应用之一键换肤

参考技术A所谓换肤,就是改变页面中颜色值,使页面呈现出不同的色彩效果。首先,将UCD提供的所有颜色值收集到一起,语义化定义到文件中,如下面的UIConfig.qml其中,默认颜色定义在ctrlColor中,天蓝色主题定义在ctrlColorBlue中... 查看详情

qt系列——优美界面设计实现不同换肤(代码片段)

一、QT不同皮肤设置本程序的BaseWindow是继承于QWidget,如果大家想要继承QMainWindow,则需要把BaseWindow的基类改为QMainWindow。去掉窗口自带的边框,Qt中直接用一下代码即可去除窗口边框效果。//1.------设置窗体标题栏隐藏... 查看详情

在Qt中设置应用程序主题[重复]

】在Qt中设置应用程序主题[重复]【英文标题】:SetapplicationthemeinQt[duplicate]【发布时间】:2014-01-1219:04:46【问题描述】:有没有一种方法可以从我的应用程序自己的代码中设置应用程序主题?比如这样的函数:setApplicationTheme("Plas... 查看详情

如何将应用默认主题更改为不同的应用主题?

】如何将应用默认主题更改为不同的应用主题?【英文标题】:Howtochangeappdefaultthemetoadifferentapptheme?【发布时间】:2013-10-1117:56:46【问题描述】:我有一个默认主题为Holo.Light的Android应用程序,但我想将其更改为Theme.Black。我尝试... 查看详情

qt应用程序图标

QT生成在Windows下有图标的exe文件(IDE=QTCreator)我个人十分喜爱QTCreator的IDE界面与操作,但是也许是尚未完全成熟或者是为了代码跨平台,有些功能并没有直接提供。比如Windows下做软件,至少作为主程序或启动程序的exe文件一般都... 查看详情

更改 Ag Grid 材质主题图标和颜色不起作用

...时间】:2019-08-0616:48:26【问题描述】:我一直试图在我的应用程序中更改AgGrid的颜色,但它们只会显示为黑色。我尝试在StackBlitz中重新创建问题,看看是否有人知道原因,但现在遇到了一个完全不同的问题。StackBlitz中甚至没有... 查看详情

设置qt应用程序图标及应用程序名

一直以来很纠结给qt应用程序添加图标问题,在网上收过一次,但是感觉不够完整,现将自己的实现过程记录下,以便以后查看:通过网上的例子知道qt助手中有相关说明:SettingtheApplicationIconTheapplicationicon,typicallydisplayedinthetop-lef... 查看详情

制作go主题时有些图标他没有怎么办

参考技术A你是说系统提供的那些应用没有你想要换的那个吗?点常用图标,右侧的普通分辨率,拉到最后会有添加哦可以直接搜索应用添加上去,再提换图标就可以啦祝你成功~追问是我想搜索的应用他没有所以图标也换不了追... 查看详情

OSX 上的 QT:托盘图标 - 图标 Dock 问题

...述】:我的目的是创建一个没有自动显示主窗口的QT托盘应用程序。这个应用的启动,是一个带有菜单的托盘图标...问题是我的Dock图标仍然显示在我的应用程序中。我的问题是:1)如何防止停靠图标出现2)如果答案涉及将条目添... 查看详情

Qt 5.0.1 中不显示应用程序图标

】Qt5.0.1中不显示应用程序图标【英文标题】:Applicationiconsdon\'tshowinQt5.0.1【发布时间】:2013-03-1217:56:09【问题描述】:我有一个使用Qt4.8开发的应用程序(运行良好),现在我正在尝试将其迁移到Qt5。我下载并安装了QtCreator2.6.2... 查看详情

错误的 Qt Android 主题

...】:2015-02-1716:27:14【问题描述】:我需要使用Qt创建Android应用程序,但我不知道如何使应用程序看起来像原生。http://i.stack.imgur.com/h3x2S.jpg我需要它是这样的:http://i.stack.imgur.com/KiBcm.jpg我尝试更改android:theme,但没有任何改变。我... 查看详情

在 Qt Quick 上启动 iOS 应用程序的图像和图标

】在QtQuick上启动iOS应用程序的图像和图标【英文标题】:LaunchimageandiconsforiOSapplicationsonQtQuick【发布时间】:2020-02-1821:42:49【问题描述】:我试图弄清楚如何按照本指南(https://doc.qt.io/qt-5/ios-platform-notes.html#launch-images)添加应用程... 查看详情

带有 MaterialComponents 主题的 Android FAB 图标始终为黑色

...】:2019-04-2106:44:20【问题描述】:我正在创建一个Android应用,并且正在使用AndroidX库和Materialdesign主题。我在styles.xml上的应用主题是:<stylename="App 查看详情

在每个故事的故事书中应用不同的主题

】在每个故事的故事书中应用不同的主题【英文标题】:Applyadifferentthemeonaperstorybasisstorybook【发布时间】:2021-06-0100:07:01【问题描述】:我正在Storybook(v6.1.14)中制作一个反应组件库我有两个不同的主题,基本上是明暗版。我将我... 查看详情