Files
scuc-qt-course/docs/teaching/examples/qss_styling/qt_qss_styling.cpp
T
张宗平 1f66098277 Qt 示例窗口默认不再自动退出,仅离屏验证时自动退出
p03/ 生成产物与 docs/teaching/examples/ 手工示例里的 QTimer::singleShot
自动退出逻辑,从"始终 200ms 后退出"改为"仅当 QT_QPA_PLATFORM=offscreen
时才退出"。正常运行(有显示环境)窗口保持打开,需手动关闭;离屏自动化
验证(tools/run_qt.sh + QT_QPA_PLATFORM=offscreen)行为不变。

p03/ 改动来自重新生成 tools/gen_part3.py(AUTO_QUIT 常量加 qgetenv 判断),
未手改生成产物。QCoreApplication 控制台风格示例(qfile_basic 等)本就
执行完即退出,不受影响。
2026-07-02 16:14:49 +08:00

62 lines
2.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ============================================================================
// qt_qss_styling —— 教学补充示例(非 wiki 生成,手工维护)
// 用途:方案书「C++方向 Day2」要求的 QSS 界面美化,仓库 p03/ 原有 wiki 抓取内容
// 未覆盖这一点,故补一个最小示例。
// 配套文档:docs/teaching/examples/qss_styling/README.md
// 离屏验证:QT_QPA_PLATFORM=offscreen tools/run_qt.sh qt_qss_styling(自动退出)
// ============================================================================
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QLabel>
#include <QVBoxLayout>
#include <QTimer>
class StyledPanel : public QWidget {
Q_OBJECT
public:
explicit StyledPanel(QWidget* parent = nullptr) : QWidget(parent) {
auto* title = new QLabel(QStringLiteral("QSS 样式演示"), this);
title->setObjectName("title");
auto* okBtn = new QPushButton(QStringLiteral("确定"), this);
okBtn->setObjectName("okButton");
auto* cancelBtn = new QPushButton(QStringLiteral("取消"), this);
cancelBtn->setObjectName("cancelButton");
auto* layout = new QVBoxLayout(this);
layout->addWidget(title);
layout->addWidget(okBtn);
layout->addWidget(cancelBtn);
// 整个窗口一份样式表:按 objectName 选择器精确命中控件,
// 也可以只用类型选择器(QPushButton { ... })一次性套所有按钮。
setStyleSheet(
"QWidget { background-color: #f4f6f8; }"
"QLabel#title { font-size: 18px; font-weight: bold; color: #2b6cb0; padding: 6px; }"
"QPushButton { border-radius: 6px; padding: 6px 14px; color: white; }"
"QPushButton#okButton { background-color: #2f855a; }"
"QPushButton#okButton:hover { background-color: #276749; }"
"QPushButton#cancelButton { background-color: #a0522d; }"
"QPushButton#cancelButton:pressed { background-color: #7b3f22; }"
);
}
};
int main(int argc, char* argv[]) {
QApplication app(argc, argv);
StyledPanel panel;
panel.resize(240, 160);
panel.show();
// 仅在离屏自动化验证时(QT_QPA_PLATFORM=offscreen200ms 后自动退出;
// 正常运行(有显示环境)窗口保持打开,不自动退出。
if (qgetenv("QT_QPA_PLATFORM") == "offscreen") {
QTimer::singleShot(200, &app, &QApplication::quit);
}
return app.exec();
}
#include "qt_qss_styling.moc"