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

QT之QSS的使用方法和常用控件的样式设置

QSS(Qt Style Sheets)是QT中用于界面美化的强大工具,类似于CSS但针对QT控件进行了优化。下面将详细介绍QSS的使用方法和常用控件的样式设置。

目录

  1. QSS基础语法

  2. 常用控件QSS设置

  3. 高级技巧

QSS基础语法

基本选择器

选择器 {属性名: 属性值;
}// 通用选择器
* { color: black; }// 类型选择器
QPushButton { background: red; }// 类选择器
.QPushButton { border: 1px solid; }// ID选择器
QPushButton#okButton { color: green; }// 子控件选择器
QComboBox::drop-down { width: 20px; }// 伪状态选择器
QPushButton:hover { background: blue; }

常用属性

/* 颜色和背景 */
color: #ff0000;
background-color: rgba(255, 0, 0, 128);
background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 red, stop:1 blue);/* 边框 */
border: 2px solid #ccc;
border-radius: 5px;
border-top: 1px dashed black;/* 字体 */
font-family: "Microsoft YaHei";
font-size: 14px;
font-weight: bold;
font-style: italic;/* 尺寸和边距 */
width: 100px;
height: 30px;
padding: 5px;
margin: 10px;

常用控件QSS设置

QPushButton

QPushButton {background-color: #4CAF50;border: none;color: white;padding: 10px 20px;border-radius: 5px;font-size: 14px;
}QPushButton:hover {background-color: #45a049;
}QPushButton:pressed {background-color: #3d8b40;
}QPushButton:disabled {background-color: #cccccc;color: #666666;
}

QLineEdit

QLineEdit {border: 2px solid #ddd;border-radius: 4px;padding: 8px;font-size: 14px;background-color: white;
}QLineEdit:focus {border-color: #2196F3;background-color: #f8fdff;
}QLineEdit[echoMode="2"] { /* 密码模式 */font-family: "Courier New";
}

QComboBox

QComboBox {border: 1px solid #ccc;border-radius: 3px;padding: 5px;background: white;min-width: 6em;
}QComboBox::drop-down {subcontrol-origin: padding;subcontrol-position: top right;width: 20px;border-left: 1px solid #ccc;
}QComboBox::down-arrow {image: url(:/icons/arrow-down.png);width: 12px;height: 12px;
}QComboBox QAbstractItemView {border: 1px solid #ccc;background: white;selection-background-color: #2196F3;
}

QCheckBox & QRadioButton

QCheckBox, QRadioButton {spacing: 5px;color: #333;
}QCheckBox::indicator, QRadioButton::indicator {width: 16px;height: 16px;
}QCheckBox::indicator:unchecked {border: 1px solid #ccc;background: white;
}QCheckBox::indicator:checked {border: 1px solid #2196F3;background: #2196F3;image: url(:/icons/checkmark.png);
}QRadioButton::indicator:unchecked {border: 1px solid #ccc;border-radius: 8px;background: white;
}QRadioButton::indicator:checked {border: 1px solid #2196F3;border-radius: 8px;background: #2196F3;
}

QSlider

QSlider::groove:horizontal {border: 1px solid #999999;height: 8px;background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #B1B1B1, stop:1 #c4c4c4);border-radius: 4px;
}QSlider::handle:horizontal {background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #b4b4b4, stop:1 #8f8f8f);border: 1px solid #5c5c5c;width: 18px;margin: -2px 0;border-radius: 3px;
}QSlider::sub-page:horizontal {background: #2196F3;border-radius: 4px;
}

QProgressBar

QProgressBar {border: 2px solid grey;border-radius: 5px;text-align: center;background-color: #f0f0f0;
}QProgressBar::chunk {background-color: #4CAF50;border-radius: 3px;width: 10px;margin: 0.5px;
}

QTabWidget

QTabWidget::pane {border: 1px solid #ccc;background: white;
}QTabBar::tab {background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #f6f7fa, stop: 1 #dadbde);border: 1px solid #ccc;border-bottom: none;padding: 8px 16px;margin-right: 2px;border-top-left-radius: 4px;border-top-right-radius: 4px;
}QTabBar::tab:selected {background: white;border-color: #ccc;border-bottom-color: white;
}QTabBar::tab:hover:!selected {background: #e0e0e0;
}

QGroupBox

QGroupBox {font-weight: bold;border: 2px solid #ccc;border-radius: 5px;margin-top: 1ex;padding-top: 10px;background-color: #f9f9f9;
}QGroupBox::title {subcontrol-origin: margin;subcontrol-position: top left;left: 10px;padding: 0 8px;background-color: #2196F3;color: white;border-radius: 3px;
}

QMenu & QMenuBar

QMenuBar {background-color: #f0f0f0;border: 1px solid #ccc;
}QMenuBar::item {padding: 5px 10px;background: transparent;
}QMenuBar::item:selected {background: #2196F3;color: white;
}QMenu {background-color: white;border: 1px solid #ccc;
}QMenu::item {padding: 5px 20px;
}QMenu::item:selected {background-color: #2196F3;color: white;
}QMenu::separator {height: 1px;background: #ccc;margin: 5px 0;
}

高级技巧

渐变效果

/* 线性渐变 */
background: qlineargradient(x1:0, y1:0, x2:1, y2:1,stop:0 white, stop:1 black);/* 辐射渐变 */
background: qradialgradient(cx:0.5, cy:0.5, radius: 0.5,fx:0.5, fy:0.5,stop:0 white, stop:1 black);/* 锥形渐变 */
background: qconicalgradient(cx:0.5, cy:0.5, angle:0,stop:0 white, stop:1 black);

动态样式

// 根据应用程序状态改变样式
void updateStyle(bool isDarkMode) {QString style;if (isDarkMode) {style = "QWidget { background: #333; color: white; }";} else {style = "QWidget { background: white; color: black; }";}qApp->setStyleSheet(style);
}// 动态修改单个控件样式
button->setStyleSheet("QPushButton { background: red; }");

使用资源文件

/* 在QRC文件中添加图片资源 */
QPushButton#iconButton {background-image: url(:/images/button-bg.png);border: none;
}QCheckBox::indicator:checked {image: url(:/icons/checkmark-white.png);
}

继承和覆盖

/* 基础按钮样式 */
.MyButton {min-width: 80px;padding: 8px;border-radius: 4px;
}/* 特定类型按钮 */
.MyButton.primary {background: #2196F3;color: white;
}.MyButton.danger {background: #f44336;color: white;
}.MyButton.warning {background: #ff9800;color: white;
}

调试技巧

  1. 使用Qt Designer:实时预览样式效果

  2. 样式表继承检查:使用qApp->styleSheet()查看当前样式

  3. 选择器优先级:ID选择器 > 类选择器 > 类型选择器

注意事项

  1. 性能考虑:复杂的样式可能影响性能

  2. 平台差异:不同平台下样式表现可能不同

  3. 样式继承:子控件会继承父控件的样式

  4. 资源管理:及时释放不再使用的样式资源

通过合理使用QSS,你可以创建出美观、专业的QT应用程序界面。记得在实际项目中根据需求调整样式,并保持良好的代码组织结构。

--------------------------------------------------------------------------

  • 好文收藏参考:【QT】使用QSS进行界面美化

http://www.dtcms.com/a/344644.html

相关文章:

  • Qt 的事件类QEvent及其他子类事件的开发详解:从基础到实践的全方位指南
  • 高并发用户数峰值对系统架构设计有哪些影响?
  • Qt-窗口类部件
  • 极验demo(float)(一)
  • 数据结构:队列 二叉树
  • vivo“空间计算-机器人”生态落下关键一子
  • 码蹄杯进阶
  • 笔试——Day46
  • 基于SpringBoot+Vue框架的高校论坛系统 博客论坛系统 论坛小程序
  • 企业版Idea 无快捷键的启动方式
  • 和AI Agent一起读论文——A SURVEY OF S ELF EVOLVING A GENTS(五)
  • 如何监控和管理微服务之间的调用关系
  • 微信开发者工具:更改 AppID 失败
  • Unreal Engine Class System
  • 滑动窗口+子串+普通数组算法
  • Spring AI调用本地大模型实战
  • 【LINUX】CentOS7在VMware15中,从命令行界面切换到图形界面的异常汇总
  • Day10 Go语言深入学习(2)
  • 零成本 Redis 实战:用Amazon免费套餐练手 + 缓存优化
  • skywalking-agent与logback-spring.xml中的traceId自动关联的原理
  • 使用C#的 PdfDocument 实现 PDF 页眉页脚的编辑
  • 我用Photoshop Firefly+Blender,拯救被环境毁掉的人像大片
  • Blender模型动画导入到UE5
  • uniappx新增的几个api
  • AI + 教育:个性化学习如何落地?教师角色转变与技术伦理的双重考验
  • 文字提取技术让文档实现数字化效率翻倍-文字识别接口
  • Kubernetes概念:ETCD 的本质与备份恢复实践
  • 永磁同步电机控制算法-反馈线性化滑模直接转矩控制
  • 智慧工厂烟雾检测:全场景覆盖与精准防控
  • 全运会倒计时80天,国鑫服务器如何扛起粤港澳的“数字火炬”?