news 2026/4/27 21:28:59

Qtui文件界面模块化设计以及开发qss样式表文件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Qtui文件界面模块化设计以及开发qss样式表文件

Qt开发ui文件界面模块化设计

一、Qt界面模块化设计

Qt界面模块化就是使用一个.ui文件等于一个类(界面类)的思路,然后在主界面直接调用这个界面类,说白了就是主界面包含N个界面类,这就是面向对象的最基本用法:类的实例化与组合。

二、一个ui文件自动生成一个界面类(.h文件)

三、测试

项目目录结构/ ├── CMakeLists.txt ├── main.cpp ├── testUI01.ui ├── testUI02.ui ├── testUI03.ui ├── app.rc #VS资源(图标、版本) ├── app.ico #图标文件 ├── resources.qrc #Qt资源 ├── style.qss #样式文件 └── images/ └── bg.jpg #图片资源

1.CMakeLists.txt

cmake_minimum_required(VERSION 3.20 FATAL_ERROR) #项目名称 project(QtDemo VERSION 1.0 LANGUAGES CXX) #C++标准(VS2015最高支持 14) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) #强制使用VS2015 工具集 v140 set(CMAKE_GENERATOR_TOOLSET "v140" CACHE STRING "Platform Toolset" FORCE) #自动处理Qt信号槽/UI/资源(必须开) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) #查找Qt5.12.6(精准匹配) find_package(Qt5 5.12.6 REQUIRED COMPONENTS Core Widgets Gui) #让VS能找到自动生成的头文件 include_directories(${CMAKE_CURRENT_BINARY_DIR}) #强制生成 testUI01.h testUI02.h testUI03.h qt5_wrap_ui(UI_HEADERS testUI01.ui testUI02.ui testUI03.ui) #源文件(你可以自己加) set(SOURCES main.cpp app.rc #VS 资源 resources.qrc #Qt 资源 ${UI_HEADERS} # 把生成好的ui文件加进来 ) #WIN32:去掉控制台黑框 add_executable(QtDemo WIN32 ${SOURCES} ) #链接Qt库 target_link_libraries(QtDemo PRIVATE Qt5::Core Qt5::Widgets Qt5::Gui ) #VS输出目录优化 set_target_properties(QtDemo PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/bin/Debug RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/bin/Release ) #自动配置VS调试PATH set(QT_BIN_PATH "D:/Tool/DevelopmentTool/Qt/Qt5.12.6/5.12.6/msvc2015_64/bin") set_target_properties(QtDemo PROPERTIES VS_DEBUGGER_ENVIRONMENT "PATH=${QT_BIN_PATH};%PATH%" )

2.main.cpp

#include <QApplication> #include <QWidget> #include <QLabel> #include <QFile> #include <QHBoxLayout> #include "ui_testUI01.h" #include "ui_testUI02.h" #include "ui_testUI03.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget window; window.setWindowTitle("Qt5 + VS2015 + CMake"); //1.设置名称(给QSS用) window.setObjectName("centralWidget"); //2.从qrc读取QSS文件 QFile file(":/style.qss"); file.open(QFile::ReadOnly); QString qss = file.readAll(); file.close(); //3.应用样式表 window.setStyleSheet(qss); window.resize(1920, 1080); #if 1 //创建自动生成的UI对象 Ui::testUI01 ui01; //把UI绑定到窗口 QWidget *w01 = new QWidget(); ui01.setupUi(w01); //创建自动生成的UI对象 Ui::testUI02 ui02; //把UI绑定到窗口 QWidget *w02 = new QWidget(); ui02.setupUi(w02); //创建自动生成的UI对象 Ui::testUI03 ui03; //把UI绑定到窗口 QWidget *w03 = new QWidget(); ui03.setupUi(w03); //布局组装(界面模块化拼接) QHBoxLayout* hBoxLayout = new QHBoxLayout(&window); hBoxLayout->addWidget(w01); hBoxLayout->addWidget(w02); hBoxLayout->addWidget(w03); #endif window.show(); return app.exec(); }

3.testUI01.ui/testUI02.ui/testUI03.ui#自行通过工具生成

4.app.rc

IDI_ICON1 ICON "app.ico"

5.app.ico #自行找一个ico(32x32)格式的图片

6.resources.qrc

<RCC> <qresource prefix="/"> <file>style.qss</file> <!-- 样式表 --> <file>images/bg.jpg</file> <!-- 背景图 --> </qresource> </RCC>

7.style.qss

/* style.qss */ #centralWidget { background-image: url(:/images/bg.jpg); background-repeat: no-repeat; background-position: center; background-size: cover; } #testUI01 { background-color: red; } #testUI02 { background-color: yellow; } #testUI03 { background-color: rgb(144, 238, 144); }

8.images/bg.jpg #自行找一个背景图片

9.程序的编译参考

Qt开发之CMake版本、Qt版本和VS2015的编译工具链适配那篇文章。

10.编译程序生成的界面类(.h文件)及程序的运行结果

开发qss样式表文件

一、一些概念

1.Qt QSS(Qt Style Sheets)

语法与CSS高度相似,核心是选择器+声明块,用于精准控制Qt控件外观,具体知识点基础结构、选择器、属性、优先级。

2.核心语法结构

1)基本格式 选择器 { 属性名1: 属性值1; 属性名2: 属性值2; /*多条声明,分号分隔*/ } --选择器:指定样式作用的控件/控件组; --声明块:{} 包裹,内部是 属性: 值; 键值对,每条必须以分号结尾; 2)多选择器共用样式 用逗号,分隔多个选择器,共享同一套声明 QPushButton, QLineEdit, QComboBox { color: red; background-color: white; } 3)大小写规则 --属性名:不区分大小写(color/Color/COLOR 等价); --类名、对象名、Qt 属性名:严格区分大小写。

3.选择器(Selector)

选择器决定样式作用对象:

1)通用选择器(*):匹配所有控件,用于全局默认样式;

2)类型选择器(WidgetType):匹配指定类及其所有子类的控件实例:

/*匹配所有 QPushButton 及其子类(如MyPushButton)*/ QPushButton { border: 1px solid gray; }

3)ID选择器(#objectName):通过控件对象名objectName精准匹配单个控件(优先级最高);

4)类选择器(.className):匹配设置了 setProperty("class", "className") 的控件,实现分组样式:

btn->setProperty("class", "primary"); //设置控件属性 /*匹配所有 class="primary" 的控件 */ .primary { background-color: #2385bb; }

5)属性选择器([attr=value]):匹配属性值符合条件的控件,支持精确/模糊匹配:

/*精确匹配:flat 属性为 false 的 QPushButton*/ QPushButton[flat="false"] { border: 2px solid black; } /*模糊匹配:text 包含 "OK" 的 QPushButton*/ QPushButton[text*="OK"] { color: green; }

6)后代选择器(父 子):匹配父控件下的所有后代(子、孙等)控件:

/*匹配 QDialog 内所有 QLabel*/ QDialog QLabel { color: darkblue; } /*只给在LoginWindow窗口内部的名字叫btn_ok的控件生效。 不在LoginWindow内部的btn_ok不生效*/ #LoginWindow #btn_ok { background: blue; }

7)子选择器(父 > 子):仅匹配父控件的直接子控件(不包含孙级):

/*仅匹配 QWidget 直接子级的 QPushButton*/ QWidget > QPushButton { padding: 5px 10px; }

8)伪状态选择器(:state):匹配控件特定交互状态(如 hover、pressed、disabled):

/*鼠标悬停时的按钮样式*/ QPushButton:hover { background-color: lightgray; } /*按钮按下时的样式*/ QPushButton:pressed { background-color: darkgray; } /*禁用状态的输入框*/ QLineEdit:disabled { background-color: #f0f0f0; color: #888; }

9)子控件选择器(::subcontrol):匹配控件的内部子元素(如按钮文本、下拉箭头、滚动条滑块):

/*QComboBox 下拉箭头样式*/ QComboBox::drop-down { width: 20px; border-left: 1px solid gray; } /*QScrollBar 滑块样式*/ QScrollBar::handle:vertical { background-color: #ccc; border-radius: 4px; }

4.属性与值(Property&Value)

声明块内是 属性: 值;,Qt 支持大量控件样式属性:

1)颜色属性:

--color:前景色(文本颜色);

--background-color:背景色;

--border-color:边框色;

--值:取值:颜色名(red)、十六进制(#ff0000/#f00)、RGB(rgb(255,0,0))、RGBA(rgba(255,0,0,0.5));

2)字体属性:

--font-family:字体(如Arial);

--font-size:字号(14px/12pt);

--font-weight:字重(normal/bold/lighter);

--font-style:样式(normal/italic/oblique);

3)边框属性:

--border:简写(宽度 样式 颜色,如 1px solid gray);

--border-width:边框宽度;

--border-style:样式(solid/dashed/dotted/none);

--border-radius:圆角半径(实现圆角控件);

4)盒模型属性(间距):

--margin:外边距(控件与外部间距);

--padding:内边距(内容与边框间距);

--值:上右下左或单个值(四边相同);

5)背景图片:

--background-image:背景图(url(:/images/bg.png),资源路径);

--background-repeat:重复方式(repeat/repeat-x/repeat-y/no-repeat);

--background-position:位置(left top/center);

5.优先级与继承(Specificity & Inheritance)

选择器优先级决定冲突样式的生效规则:

ID 选择器(#id)> 类/属性/伪状态选择器(.class/[attr]/:state > 类型选择器(WidgetType)> 通用选择器(*)。

二、测试

查看Qt开发ui文件界面模块化设计那篇文章,主要更新了style.qss文件(给不同界面中相同的子控件添加样式):

/*style.qss*/ #centralWidget { background-image: url(:/images/bg.jpg); background-repeat: no-repeat; background-position: center; background-size: cover; } /*testUI01相关样式*/ #testUI01 #pushButton { background-color: red; } #testUI01{ background-color: black; } /*testUI02相关样式*/ #testUI02 #pushButton { color:green; } #testUI02 { background-color: yellow; } #testUI03 { background-color: rgb(144, 238, 144); }

主程序运行时的界面:

三、总结

1.参考:Qt Style Sheets(Qt帮助文档):

2.qss样式快速验证:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 21:26:54

开源语音识别OASR部署指南:从Whisper模型到私有化音频处理

1. 项目概述&#xff1a;当语音识别遇上开源&#xff0c;OASR如何重塑音频处理体验最近在折腾一个需要处理大量会议录音和访谈音频的项目&#xff0c;传统的商业语音识别服务要么太贵&#xff0c;要么对中文支持不够友好&#xff0c;要么就是数据隐私问题让人头疼。就在我四处寻…

作者头像 李华
网站建设 2026/4/27 21:25:03

终极Minecraft基岩版启动器:Bedrock Launcher完全使用指南

终极Minecraft基岩版启动器&#xff1a;Bedrock Launcher完全使用指南 【免费下载链接】BedrockLauncher 项目地址: https://gitcode.com/gh_mirrors/be/BedrockLauncher Bedrock Launcher是一款专为Minecraft基岩版设计的免费开源游戏启动器&#xff0c;它让玩家能够轻…

作者头像 李华
网站建设 2026/4/27 21:19:18

从GEO数据到发表级图表:一个完整的炎症性肠病(UC)差异分析实战,含logFC手动计算与可视化

从GEO数据到发表级图表&#xff1a;炎症性肠病差异分析全流程解析 在生物信息学研究中&#xff0c;差异表达分析是挖掘疾病相关基因的核心环节。对于临床科研人员来说&#xff0c;如何从公共数据库获取数据、进行可靠分析并生成可发表的图表&#xff0c;是论文写作的关键技能。…

作者头像 李华
网站建设 2026/4/27 21:15:28

MCP协议实战:构建政治信息洞察AI智能体服务器

1. 项目概述与核心价值最近在折腾AI智能体开发的朋友&#xff0c;可能都绕不开一个词&#xff1a;MCP&#xff08;Model Context Protocol&#xff09;。简单来说&#xff0c;它就像给AI大模型装上了一套标准化的“插件系统”&#xff0c;让模型能安全、可控地调用外部工具、数…

作者头像 李华