文章目录
- 样式表用法
- 使用动态属性自定义
- 使用Box模型自定义QPushButton
- 自定义QPushButton的菜单指示子控件
- 复杂选择器
- 完整代码:
- 特定部件样式表
- QAbstractScrollArea
- QCheckBox
- QComboBox
- QDockWidget
原文地址:https://doc.qt.io/qt-6/stylesheet-examples.html
我使用的qt5.14.2测试的
样式表用法
1.全局使用
qApp->setStyleSheet(“QLineEdit { background-color: yellow }”);
2.子类及子类以下使用
myDialog->setStyleSheet(“QLineEdit { background-color: yellow }”);
3.某一个特定的控件
使用QObject::setObjectName()设定一个ID
通过id选择器
myDialog->setStyleSheet(“QLineEdit#nameEdit { background-color: yellow }”);
4.直接在控件上使用
nameEdit->setStyleSheet(“background-color: yellow”);
使用动态属性自定义
为一个控件设置一个属性值,然后根据属性值更改样式表
QLineEdit *nameEdit = new QLineEdit(this);
nameEdit->setProperty(“mandatoryField”, true);
*[mandatoryField=“true”] { background-color: yellow }
效果图:
使用Box模型自定义QPushButton
效果图:
按钮按下效果:
自定义QPushButton的菜单指示子控件
默认情况下,菜单指示器位于填充矩形的右下角。我们可以通过指定subcontrol-position和subcontrol-origin来改变这一点,以不同的方式锚定指示器。我们也可以使用top和left来移动指示器几个像素。
效果:
复杂选择器
后面设置的QLineEdit没有起作用
效果图:
完整代码:
allwidgetshow.cpp
#include "allwidgetshow.h"
#include <QVBoxLayout>
#include <QLineEdit>
#include <QPushButton>
#include <QMenu>
#include <QAction>
#include <QUrl>
AllWidgetShow::AllWidgetShow(QWidget *parent) : QWidget(parent)
{
QVBoxLayout* mainLayOut = new QVBoxLayout();
QLineEdit* nameEdit = new QLineEdit();
nameEdit->setProperty("mandatoryField", true);
QLineEdit* emailEdit = new QLineEdit();
mainLayOut->addWidget(nameEdit);
mainLayOut->addWidget(emailEdit);
QPushButton* pushBtn1 = new QPushButton("Format C:");
pushBtn1->setObjectName("evilButton");
QPushButton* pushBtn2 = new QPushButton("Menu Btn");
QMenu* pMenu = new QMenu();
pushBtn2->setMenu(pMenu);
QAction* pAction = new QAction();
pAction->setText(tr("save"));
pMenu->addAction(pAction);
mainLayOut->addWidget(pushBtn1);
mainLayOut->addWidget(pushBtn2);
QString pushBtn1Style = "QPushButton#evilButton { background-color: red;"
"border-style: outset;border-width: 2px;"
"border-color: blue;border-radius: 10px; "
"font: bold 14px;min-width: 10em;padding: 6px;}"
"QPushButton#evilButton:pressed {"
"background-color: rgb(0, 244, 0);"
"border-style: inset;}";
QString pushBtn2Style = "QPushButton::menu-indicator{"
"image: url(:/icon/dndCopy.png);"
"subcontrol-position: right center;"
"subcontrol-origin: padding;"
"left: -2px;}";
QLineEdit* lineedit1 = new QLineEdit();
QLineEdit* lineedit2 = new QLineEdit();
lineedit2->setProperty("readOnly", true);
QLineEdit* lineedit3 = new QLineEdit();
lineedit3->setObjectName("registrationDialog");
lineedit1->setText("广阔天地");
lineedit2->setText("大有作为");
lineedit3->setText("毛主席万岁");
mainLayOut->addWidget(lineedit1);
mainLayOut->addWidget(lineedit2);
mainLayOut->addWidget(lineedit3);
QString complexStyle = "QLineEdit { color: red }"
"QLineEdit[readOnly=\"true\"] { color: gray }"
"QLineEdit#registrationDialog { color: brown }"
"QDialog QLineEdit { color: yellow }";
//后面设置的QLineEdit没有起作用
this->setStyleSheet("*[mandatoryField=\"true\"] { background-color: yellow }"
+pushBtn1Style+pushBtn2Style+complexStyle);
this->setLayout(mainLayOut);
}
allwidgetshow.h
#ifndef ALLWIDGETSHOW_H
#define ALLWIDGETSHOW_H
#include <QObject>
#include <QWidget>
class AllWidgetShow : public QWidget
{
Q_OBJECT
public:
explicit AllWidgetShow(QWidget *parent = nullptr);
signals:
};
#endif // ALLWIDGETSHOW_H
特定部件样式表
QAbstractScrollArea
任何QAbstractScrollArea (Item视图,qtexttedit和QTextBrowser)的背景都可以使用背景属性进行设置。
效果图:
QCheckBox
QCheckBox的样式与QRadioButton的样式几乎相同。主要区别在于三状态QCheckBox具有不确定状态。
效果图:
QComboBox
QComboBox的弹出窗口是一个QAbstractItemView,并使用后代选择器进行样式设置。
当弹出窗口打开时,QComboBox获得“打开”状态。
QDockWidget
效果图: