当前位置: 首页 > news >正文

Qt开发经验 --- Qt 修改控件样式的方式(16)

文章目录

    • @[toc]
    • 1 概述
    • 2 Qt Style Sheets (QSS)
    • 3 使用 QStyle 和 QProxyStyle
    • 4 设置 Palette (调色板)
    • 5 使用预定义的 QStyle
    • 6 直接设置控件属性
    • 7 自定义控件绘制

更多精彩内容
👉内容导航 👈
👉Qt开发经验 👈

1 概述

Qt 提供了多种修改控件样式的方式,以下是主要的几种方法:

各方法的特点对比

方法优点缺点适用场景
QSS简单易用,类似CSS,可集中管理性能略低,调试困难快速界面美化,
大部分UI样式需求
QStyle性能好,控制精确复杂,需了解绘制细节深度定制外观
Palette简单,性能好功能有限,主要控制颜色简单颜色修改
属性设置直观,易理解零散,不易维护单个控件快速调整
自定义绘制(paintEvent)完全控制复杂,维护困难特殊UI需求

推荐使用策略

  1. 简单样式调整:使用 QSS
  2. 整体风格定制:使用 QStyle 或 QProxyStyle
  3. 颜色主题切换:使用 Palette
  4. 特殊控件外观:自定义绘制
  5. 项目级样式管理:QSS 文件 + 资源系统

2 Qt Style Sheets (QSS)

Qt样式表是最常用和灵活的样式修改方式,语法类似于CSS。

使用方式

  • 全局应用:通过 QApplication::setStyleSheet()

  • 窗口级别:通过 QWidget::setStyleSheet()

  • 控件级别:直接对特定控件设置样式

// 直接在代码中设置
QPushButton *button = new QPushButton("按钮");
button->setStyleSheet("QPushButton {""background-color: blue;""color: white;""border-radius: 5px;""padding: 10px;""}");// 或者应用到整个应用程序
QApplication::setStyleSheet("QPushButton { background-color: red; }");

3 使用 QStyle 和 QProxyStyle

通过继承或代理 QStyle 来改变控件的绘制方式:

   // 使用 QProxyStyle 自定义样式class CustomStyle : public QProxyStyle{public:void drawControl(ControlElement element, const QStyleOption *option,QPainter *painter, const QWidget *widget) const override{if (element == CE_PushButton) {// 自定义按钮绘制逻辑} else {QProxyStyle::drawControl(element, option, painter, widget);}}};// 应用样式QApplication::setStyle(new CustomStyle);

4 设置 Palette (调色板)

通过修改控件的调色板来改变颜色:

QPalette palette;
palette.setColor(QPalette::Button, QColor(255, 0, 0));      // 按钮背景色
palette.setColor(QPalette::ButtonText, QColor(255, 255, 255)); // 按钮文字颜色QPushButton *button = new QPushButton("按钮");
button->setPalette(palette);
button->setAutoFillBackground(true);  // 必须启用自动填充背景

5 使用预定义的 QStyle

Qt 提供了几种内置样式:

  // 设置系统默认样式QApplication::setStyle(QStyleFactory::create("Fusion"));     // 现代风格QApplication::setStyle(QStyleFactory::create("Windows"));    // Windows 风格QApplication::setStyle(QStyleFactory::create("Macintosh"));  // Mac 风格// 或者为特定控件设置样式widget->setStyle(QStyleFactory::create("Windows"));

6 直接设置控件属性

通过控件自身的属性方法设置外观:

  QPushButton *button = new QPushButton("按钮");button->setStyleSheet("background-color: red; color: white;");  // 样式表button->setFont(QFont("Arial", 12, QFont::Bold));              // 字体button->setFixedSize(100, 30);                                 // 大小button->setCursor(Qt::PointingHandCursor);                     // 光标

7 自定义控件绘制

重写控件的 paintEvent() 方法:

   class CustomWidget : public QWidget{protected:void paintEvent(QPaintEvent *event) override{QPainter painter(this);painter.setBrush(Qt::blue);painter.drawRect(rect());// 自定义绘制逻辑}};

文章转载自:

http://9x3arcLm.kztpn.cn
http://AAfZexzt.kztpn.cn
http://1iPK9Dva.kztpn.cn
http://kT2J3jFL.kztpn.cn
http://NTysQNY7.kztpn.cn
http://MNs8dP1S.kztpn.cn
http://AiiyFCbX.kztpn.cn
http://jqiUKVe8.kztpn.cn
http://MUJtdw0J.kztpn.cn
http://KRPvcibp.kztpn.cn
http://ZrlTwKbw.kztpn.cn
http://0sAsTtvn.kztpn.cn
http://7sInbVuA.kztpn.cn
http://68tDOoBq.kztpn.cn
http://AC1iyA6e.kztpn.cn
http://Fh6cgTRT.kztpn.cn
http://HVD7u0T6.kztpn.cn
http://UJN7m2Dr.kztpn.cn
http://eksbnpgP.kztpn.cn
http://hcJvPhpO.kztpn.cn
http://pjuKbbkp.kztpn.cn
http://9Ty0TyQ6.kztpn.cn
http://X1loRWEG.kztpn.cn
http://3dNpHwP1.kztpn.cn
http://scOkLybm.kztpn.cn
http://qoY9GkJk.kztpn.cn
http://SxjWzMTF.kztpn.cn
http://pYRo5MOH.kztpn.cn
http://4ah3awBe.kztpn.cn
http://hByszJnF.kztpn.cn
http://www.dtcms.com/a/380514.html

相关文章:

  • UE5 基础应用 —— 07 - 角色蓝图 简单使用
  • Motioncam Color S + 蓝激光:3D 视觉革新,重塑工业与科研应用新格局
  • arduino编程esp8266模块并烧写联网详细教程【单片机联网】
  • 云蝠智能大模型呼叫——AI不仅能“听懂话”,更能“读懂心”
  • 交通信号灯SUMO仿真深度强化学习完整代码python
  • QT M/V架构开发实战:QStandardItemModel介绍
  • OSI(Open Systems Interconnection)七层模型详解
  • 【硬件-笔试面试题-91】硬件/电子工程师,笔试面试题(知识点:MOS管参数选型)
  • 工业相机与镜头的靶面尺寸详解:选型避坑指南
  • Python @contextmanager 装饰器
  • 关于ros2中的话题topic的一些问题
  • 计算机视觉----opencv高级操作(二)(图像的直方图均衡化,角点检测,特征提取Sift)
  • Vue 3 中监听多个数据变化的几种方法
  • nodejs 、 npm、vite的版本对应关系及创建一个指定版本的 Vite 项目
  • 5. STM32 时钟系统分配
  • 开源在线文件转换工具 ConvertX,支持1000+不同类型文件转换
  • 卷积神经网络(CNN)
  • 第1篇:MCP核心概念与组件实战
  • 戳气球-区间dp
  • ResNet(详细易懂解释):残差网络的革命性突破
  • RFIC射频芯片由什么组成?
  • OpenCV的cv2.VideoCapture如何加GStreamer后端
  • 自由学习记录(98)
  • 【爬坑指南】亚马逊文件中心 AWS S3 预签名URL 前端直传
  • 【技术教程】如何将文档编辑器集成至用PHP编写的Web应用程序中
  • AWS RDSInstance模型优化实践:从字段长度调整到索引策略全面提升
  • ADSP-ADI sharc 内存配置笔记
  • 嵌入式C语言-关键字typedef
  • daily notes[44]
  • 手机端APP解析工具开发实战——从0到1实现漏洞检测与接口分析