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
,按前缀归类(如ui
、icons
),并添加图片文件(plus.png
、minus.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 设置图标(来自资源)
- 选中按钮,在右侧
Property Editor
找到icon
属性。 - 点击右侧按钮选择
Choose Resource...
。 - 在弹窗中展开
<resource root>
→ 前缀(如icons
),选择图片文件,确认。 - 需要区分状态时,可在
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-open
、document-save
、edit-copy
、edit-paste
、view-refresh
等。
四、用样式表(Style Sheet)美化按钮文字
右键按钮 → Change styleSheet...
,可通过 Add Color
、Add 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")
。- 禁用态没有灰色图标:在
icon
的Disabled On/Off
分别指定,或在逻辑中按状态切换不同资源。 - 图标过小/过大:使用
setIconSize(QSize(w,h))
,或基于 DPI/字体计算自适应尺寸。 - 资源路径错误:确保以
:/
开头,且与.qrc
前缀/层级一致。
小结
- 用
.qrc
管理 UI 与图标,在 CMake 中启用自动 rcc 或使用qt_add_resources
;qmake 则通过RESOURCES
即可。 - Linux 下优先使用 XDG 主题图标,配合资源图标做回退,获得原生外观与稳定性。
- 样式表主要用于文字和边框等,不改变位图图标颜色。
附:仓库内相关示意图
(不同 Qt 版本界面略有差异,仅供参考)。