qt-C++笔记之QtDesigner-Creator按钮图标与样式

整理:如何用 .qrc 管理资源、在 Designer/Creator 中为 QPushButton 设置图标(资源或系统主题),以及用样式表调整文字样式。涵盖 C++/Qt 与 PySide/PyQt;Linux 桌面优先,其他平台请注意回退策略。

在这里插入图片描述

文章目录

  • qt-C++笔记之QtDesigner-Creator按钮图标与样式
    • 一、管理资源(.qrc)
      • CMake(推荐,Qt6/Qt5 通用)
      • qmake
      • 手动 rcc(可选,C++ 动态装载)
      • Python 项目(将 .qrc 编译为 Python 模块并导入)
    • 二、在 Designer 中给 QPushButton 设置图标(来自资源)
    • 三、使用系统主题图标(XDG Icon Theme)
    • 四、用样式表(Style Sheet)美化按钮文字
    • 五、常见问题定位
    • 小结
    • 附:仓库内相关示意图

一、管理资源(.qrc)

  • 创建资源文件:在右侧 Resource Browser 新建 resources.qrc,按前缀归类(如 uiicons),并添加图片文件(plus.pngminus.png 等)。
  • 运行期路径:以冒号开头,例如 :/icons/plus.png
  • 别名(Alias):在资源条目上设置别名,便于使用更短的路径名。

CMake(推荐,Qt6/Qt5 通用)

最简单做法:开启自动 rcc,把 .qrc 直接加入可执行文件源列表。

cmake_minimum_required(VERSION 3.16)
project(demo LANGUAGES CXX)set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)find_package(Qt6 REQUIRED COMPONENTS Widgets) # 或 Qt5add_executable(demomain.cppmainwindow.uiresources.qrc
)target_link_libraries(demo PRIVATE Qt6::Widgets) # 或 Qt5::Widgets

Qt6 还可使用专用命令:

# 另一种方式:明确列出文件,便于增量管理
qt_add_resources(demo resourcesPREFIX "/"FILESicons/plus.pngicons/minus.png
)

qmake

QT += widgets
RESOURCES += resources.qrc

手动 rcc(可选,C++ 动态装载)

rcc -name resources -o resources.rcc resources.qrc
#include <QResource>
QResource::registerResource("resources.rcc");

Python 项目(将 .qrc 编译为 Python 模块并导入)

# PySide6
pyside6-rcc resources.qrc -o resources_rc.py# PyQt6
pyrcc6 resources.qrc -o resources_rc.py# PyQt5
pyrcc5 resources.qrc -o resources_rc.py
# 运行前确保导入已生成的资源模块
import resources_rc  # 文件名以你生成的为准

二、在 Designer 中给 QPushButton 设置图标(来自资源)

  1. 选中按钮,在右侧 Property Editor 找到 icon 属性。
  2. 点击右侧按钮选择 Choose Resource...
  3. 在弹窗中展开 <resource root> → 前缀(如 icons),选择图片文件,确认。
  4. 需要区分状态时,可在 icon 子项里为 Normal/Disabled/On/Off 分别指定。

代码等价写法(含尺寸设置):

from PySide6.QtGui import QIcon
from PySide6.QtCore import QSizebutton.setIcon(QIcon(':/icons/plus.png'))
button.setIconSize(QSize(18, 18))
#include <QIcon>
#include <QSize>button->setIcon(QIcon(":/icons/plus.png"));
button->setIconSize(QSize(18, 18));

三、使用系统主题图标(XDG Icon Theme)

  • icon 属性菜单中选择 Set Icon From Theme...,输入或选择主题图标名(建议使用 freedesktop 命名,如 document-open)。
  • 在 Linux 桌面环境下,程序会随系统主题自动换图标;其他平台可能缺失主题,建议始终提供回退图标。

代码(带回退):

from PySide6.QtGui import QIconbutton.setIcon(QIcon.fromTheme('document-open', QIcon(':/icons/plus.png')))
button->setIcon(QIcon::fromTheme("document-open", QIcon(":/icons/plus.png")));

如需在无桌面会话或自定义路径下启用主题,可显式设置(C++):

#include <QIcon>
QIcon::setThemeName("Adwaita");
QIcon::setThemeSearchPaths({"/usr/share/icons", "/usr/local/share/icons"});

常见主题安装(Debian/Ubuntu 族示例):

sudo apt install hicolor-icon-theme adwaita-icon-theme-full
# KDE/Breeze
sudo apt install breeze-icon-theme

常用主题图标名示例:document-opendocument-saveedit-copyedit-pasteview-refresh 等。

四、用样式表(Style Sheet)美化按钮文字

右键按钮 → Change styleSheet...,可通过 Add ColorAdd Font 直接插入。

color: rgb(237, 51, 59);
font: 700 11pt "Ubuntu";

提示:

  • color 仅影响文字,不会改变图标像素颜色。若需统一风格,请准备对应配色的图标资源。
  • 需要全局一致风格时,可在 QApplication/顶层窗口设置样式表,集中管理。

五、常见问题定位

  • Designer 可见、运行不可见:多为 .qrc 未参与构建。CMake 开启 CMAKE_AUTORCC 或使用 qt_add_resources;qmake 确保 RESOURCES += ...。若用外部 resources.rcc,需运行时 QResource::registerResource。Python 侧需导入生成的 resources_rc.py
  • QIcon::fromTheme() 返回空:系统未安装主题或程序未能定位主题路径。安装 hicolor/adwaita/breeze 等主题,或调用 QIcon::setThemeName/SetThemeSearchPaths;总是提供回退 QIcon(":/...png")
  • 禁用态没有灰色图标:在 iconDisabled On/Off 分别指定,或在逻辑中按状态切换不同资源。
  • 图标过小/过大:使用 setIconSize(QSize(w,h)),或基于 DPI/字体计算自适应尺寸。
  • 资源路径错误:确保以 :/ 开头,且与 .qrc 前缀/层级一致。

小结

  • .qrc 管理 UI 与图标,在 CMake 中启用自动 rcc 或使用 qt_add_resources;qmake 则通过 RESOURCES 即可。
  • Linux 下优先使用 XDG 主题图标,配合资源图标做回退,获得原生外观与稳定性。
  • 样式表主要用于文字和边框等,不改变位图图标颜色。

附:仓库内相关示意图

(不同 Qt 版本界面略有差异,仅供参考)。

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95471.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95471.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/95471.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

maven 常用指令

Maven 是 Java 项目构建和依赖管理的得力助手。这里为你总结了一些常用指令&#xff0c;希望能帮你提升开发效率。下面这个表格汇总了 Maven 最核心和常用的一些命令&#xff1a;命令主要功能典型使用场景mvn clean清理项目&#xff0c;删除 target 目录及其所有编译输出文件。…

# pdf.js完全指南:构建现代Web PDF查看与解析解决方案

在当今Web开发中&#xff0c;实现高质量的PDF查看功能一直是前端开发者面临的挑战之一。作为最受欢迎的JavaScript PDF库&#xff0c;pdf.js已经成为解决这一问题的行业标准。由Mozilla开发并维护的pdf.js项目&#xff0c;通过纯JavaScript实现PDF解析与渲染&#xff0c;彻底改…

高效对象属性复制工具

日常编程中&#xff0c;经常会碰到对象属性复制的场景&#xff0c;比如 VO、DTO、PO、VO 等之间的转换&#xff0c;关于什么是VO、DTO、PO、VO 等可以看上篇文章&#xff0c;VO、DTO、PO、VO 等对象具体有哪些方式可以使用呢&#xff1f; set/get 方式 性能最好的方式&#x…

大疆图传技术参数对比 你了解多少?

无人机是现代航空技术与智能控制技术结合的产物&#xff0c;已从军事领域广泛渗透至民用场景&#xff0c;成为推动各行业效率升级的关键工具。无人机的全称为 “无人驾驶航空器&#xff08;Unmanned Aerial Vehicle&#xff0c;简称 UAV&#xff09;”&#xff0c;简言之&#…

Redis 缓存热身(Cache Warm-up):原理、方案与实践

在 Redis 缓存架构中&#xff0c;“缓存热身”是指在系统正式提供服务前&#xff08;如重启、扩容后&#xff09;&#xff0c;主动将热点数据加载到 Redis 中的操作。其核心目标是避免**缓存穿透**&#xff08;请求直达数据库&#xff09;和**缓存雪崩**&#xff08;大量请求同…

基于SpringBoot的大学生就业招聘系统

1. 在线演示&#xff1a; 后台&#xff1a;http://springbootiv1oo.xiaobias.com/springbootiv1oo/admin/dist/index.html 前台&#xff1a;http://springbootiv1oo.xiaobias.com/springbootiv1oo/front/index.html 管理员&#xff1a;abo/abo 用户&#xff1a;用户1/123456、…

Java反序列化漏洞揭秘:从原理到攻击实战

一、背景 熟悉接口开发的同学一定知道&#xff0c;能将数据对象很轻松的实现多平台之间的通信、对象持久化存储&#xff0c;序列化和反序列化是一种非常有效的手段&#xff0c;例如如下应用场景&#xff0c;对象必须 100% 实现序列化。 DUBBO&#xff1a;对象传输必须要实现序…

Time-MOE 音频序列分类任务

prompt 我准备做语音疾病分类任务。语音音频是 WAV 格式的音频&#xff0c;基本上分为两类&#xff0c;分别是疾病类和非疾病类。也有少数数据集是多分类&#xff0c;现在我找到了26个数据集&#xff0c;我准备我已经在 MLP CNN 上面测试了它们的基准&#xff0c;下面我找到了一…

[嵌入式embed][Qt]Qt5.12+Opencv4.x+Cmake4.x_测试Qt编译的opencv4.x的库

[嵌入式embed][Qt]Qt5.12Opencv4.xCmake4.x_测试Qt编译的opencv4.x的库编译Qt-Opencv库测试流程-①创建一个简单的qt-ui工程配置 & 测试配置库编译环境测试代码百度云-工程(opencv4.xqt5.12的工程)参考文档编译Qt-Opencv库 [嵌入式embed][Qt]Qt5.12Opencv4.xCmake4.x_用Qt…

相较于传统AR矿物鉴定有哪些优势?

与传统的矿物鉴定方法相比&#xff0c;AR矿物鉴定就像是一位全面升级的“超级助手”&#xff0c;展现出了无可比拟的优势。传统的矿物鉴定方法&#xff0c;往往依赖于地质学家或专业鉴定人员的丰富经验。他们需要通过肉眼观察矿物的颜色、光泽、硬度等物理特征&#xff0c;再结…

第5节:分布式文件存储

本节主要是讲解的是分布式文件存储&#xff0c;主要介绍了阿里云OSS云存储和Minio文件存储&#xff0c;本章重点主要是掌握怎么在SpringBoot项目里面接入文件存储。 记录、交流、实践&#xff0c;让每一份付出皆可看见&#xff0c;让你我共同前行&#x1f601; 1.分布式文件存…

当 GitHub 宕机时,我们如何协作?

一、引言1.1 GitHub 的重要性及宕机影响在当今软件开发的生态系统中&#xff0c;GitHub 已然成为全球开发者不可或缺的核心平台。它为无数开源项目与企业级开发团队提供了高效的代码托管、版本控制、协作开发以及项目管理等服务。然而&#xff0c;2025 年 8 月那场波及全球的 G…

Ansible 常用模块归纳总结

[studentmaster ansible]$ ansible-galaxy collection install http://ansible.example.com/materials/community-general-6.3.0.tar.gz -p collections/##将第三方模块下载到collections下 [studentmaster ansible]$ ansible-galaxy collection install http://ansible.exampl…

计算机网络:概述层---TCP/IP参考模型

&#x1f310; TCP/IP四层模型详解&#xff1a;互联网的核心协议架构深度剖析 &#x1f4c5; 更新时间&#xff1a;2025年9月3日 &#x1f3f7;️ 标签&#xff1a;TCP/IP模型 | 互联网协议 | 四层模型 | 计算机网络 | 协议栈 | 网络通信 | 王道考研 摘要: 本文将深入浅出地解析…

打工人日报#20250902

打工人日报#20250902 今天晚上去了玄武湖&#xff0c;来南京三次了&#xff0c;终于来了一次知识点 不确定度 “不确定度” 是测量领域的核心概念&#xff0c;用于量化测量结果的可靠性与分散程度—— 简单来说&#xff0c;它回答了 “这个测量值有多可信&#xff1f;真实值可能…

告别手动复制粘贴:C# 实现 Excel 与 TXT 文本文件高效互转

在日常办公和数据处理工作中&#xff0c;Excel 和 TXT文本文件是两种常见的数据存储格式。Excel文件适合进行复杂的数据分析、公式运算和图表生成&#xff0c;而 TXT文件则更适合用于存储和传输纯文本数据&#xff0c;如日志、配置文件或简单的数据列表。很多时候&#xff0c;我…

elasticsearch学习(二)插件安装

目录上一篇文章查看插件安装分词器analysis-icu重启实例重新查看插件上一篇文章 elasticsearch学习&#xff08;一&#xff09; 下载、安装和初次部署 查看插件 ➜ bin elasticsearch-plugin list warning: ignoring JAVA_HOME/Library/Java/JavaVirtualMachines/jdk1.8.0_…

(原创)SAP ATP可用量检查 OPJJ功能配置说明(900+字!)

前言&#xff1a;经常在ATP遇到问题&#xff0c;每次上网找都没有相关资料&#xff0c;一气之下直接在官网找资料收集&#xff0c;已整理相关字段与大家分享&#xff0c;避免大家走弯路附上我个人很久之前的的测试结果&#xff1a;具体字段控制说明检查不考虑补货提前期关联字段…

Unity资源管理——操作一览(编辑器下 运行时)

本文由 NRatel 历史笔记整理而来&#xff0c;如有错误欢迎指正。 资源管理是Unity游戏开发中的重头工作之一。 以下按【编辑器下】和 【运行时】&#xff0c;共十多个步骤&#xff0c;一览总体流程&#xff08;内容巨大&#xff0c;不细展开&#xff09;。 一、资源导入Unity【…

Sentinel vs Resilience4j vs Bucket4j:分布式限流方案对比与实战

Sentinel vs Resilience4j vs Bucket4j&#xff1a;分布式限流方案对比与实战 在高并发微服务架构中&#xff0c;合理的限流策略是保护系统稳定性与可用性的关键。本文将从问题背景入手&#xff0c;对 Sentinel、Resilience4j 和 Bucket4j 三种常见的分布式限流方案进行对比&am…