355 字
1 分钟
【QT】布局与QSS
2026-06-11

布局(Layouts)#

布局管理子控件的几何位置与伸缩,窗口缩放时自动调整。子控件可设 minimumSizemaximumSizesizePolicy

布局类说明
QHBoxLayout水平排列
QVBoxLayout垂直排列
QGridLayout网格
QFormLayout标签 + 字段两列表单

代码示例#

QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(new QPushButton("OK"));
layout->addWidget(new QPushButton("Cancel"));
layout->addStretch(); // 弹簧,占据剩余空间
setLayout(layout);

嵌套与比例#

QHBoxLayout *row = new QHBoxLayout;
row->addWidget(leftEdit, 1); // stretch 因子 1
row->addWidget(rightEdit, 2); // 右侧占 2 份宽度

Spacers#

QSpacerItem 或布局的 addStretch() / addSpacing(n) 控制空白与对齐。

布局原则#

  • 顶层窗口或容器设一个主布局,避免用固定 setGeometry 硬编码坐标。
  • 对话框常用 QDialogButtonBox 放标准按钮并配合布局。

QSS(Qt Style Sheets)#

语法类似 CSS,用于定制控件外观(颜色、边框、字体、状态伪类等)。

基本写法#

widget->setStyleSheet("QPushButton { color: white; background-color: #2d89ef; }");

全局:

qApp->setStyleSheet("QToolTip { color: black; background: #ffffcc; }");

选择器#

写法含义
QPushButton所有按钮
QPushButton#okButtonobjectName 为 okButton
QPushButton:hover悬停状态
QPushButton:pressed按下
QPushButton:disabled禁用
QPushButton:checked可选中按钮选中时

常用属性#

QLineEdit {
border: 1px solid #ccc;
border-radius: 4px;
padding: 4px;
background: white;
}
QLineEdit:focus {
border-color: #2d89ef;
}
QProgressBar {
border: 1px solid grey;
text-align: center;
}
QProgressBar::chunk {
background-color: #05B8CC;
}

子控件(部分控件支持)#

QComboBox::drop-down { width: 20px; }
QScrollBar:vertical { width: 12px; }

与 QPalette、QStyle 的关系#

  • QPalette:系统调色板,适合跟随主题微调。
  • QStyleFusionWindowsmacOS 等原生或跨平台风格;setStyle() 换整体风格。
  • QSS:最灵活,可完全覆盖绘制;对复杂原生控件(如部分 macOS 控件)支持有限。

外部样式表文件#

QFile f(":/styles/app.qss");
if (f.open(QIODevice::ReadOnly))
qApp->setStyleSheet(QString::fromUtf8(f.readAll()));

资源文件 .qrc 中可嵌入 app.qss,路径如 :/styles/app.qss

注意事项#

  • 子控件设置 QSS 后可能失去部分平台原生效果。
  • 动态属性可配合选择器:widget->setProperty("danger", true);QPushButton[danger="true"] { ... }
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

【QT】布局与QSS
https://lysj.work/posts/studynotes/qt/qt布局与qss/
作者
Sekiro
发布于
2026-06-11
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录