Qt开发经验 --- 避坑指南(4)
文章目录
- @[toc]
- 1.1 Qt自定义控件是样式表无效的解决方法;
- 1.2 QAbstractSpinBox设置+-图标无效问题
- 1.3 Qss设置自定义属性
- 1.4 QSpinBox样式
文章目录
- @[toc]
- 1.1 Qt自定义控件是样式表无效的解决方法;
- 1.2 QAbstractSpinBox设置+-图标无效问题
- 1.3 Qss设置自定义属性
- 1.4 QSpinBox样式
更多精彩内容 |
---|
👉内容导航 👈 |
👉Qt开发经验 👈 |
1.1 Qt自定义控件是样式表无效的解决方法;
-
在构造函数设置属性:
this->setAttribute(Qt::WA_StyledBackground);
(最好) -
改成继承QFrame,因为QFrame自带paintEvent函数已做了实现,在使用样式表时会进行解析和绘制;
-
新实现QWidget的paintEvent函数时,使用QStylePainter绘制;
void MyWidget::paintEvent(QPaintEvent* e) {QStyleOption option;option.init(this);QPainter p(this);style()->drawPrimitive(QStyle::PE_Widget, &option, &p, this); }
1.2 QAbstractSpinBox设置±图标无效问题
-
QAbstractSpinBox
类及其子类控件支持通过buttonSymbols
属性设置使用上下箭头图标、加减图标,但我们常常发现buttonSymbols设置了PlusMinus后还是无法显示加减图标; -
这个问题我不知道是不是qt bug还是使用的问题;
-
解决办法: 通过qss加上边框样式
border: 2px solid red;
就可以了;
1.3 Qss设置自定义属性
-
widget.h
class Widget : public QWidget {Q_OBJECTQ_PROPERTY(QColor color READ color WRITE setColor ) // 定义属性 public:Widget(QWidget *parent = nullptr);~Widget();void setColor(QColor value); // 设置属性函数QColor color(); // 返回函数private slots:void on_pushButton_clicked();private:Ui::Widget *ui;QColor m_color; // 成员属性 };
-
widget.cpp
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);qApp->setStyleSheet("Widget{qproperty-color: red;}"); // 加载Qss样式表ui->lineEdit->setText(this->m_color.name()); // 获取属性值(这里获取不到) }Widget::~Widget() {delete ui; }/*** @brief 设置属性值,Qss调用这个函数* @param value*/ void Widget::setColor(QColor value) {m_color = value; }QColor Widget::color() {return m_color; }void Widget::on_pushButton_clicked() {ui->lineEdit->setText(this->m_color.name()); // 获取属性值 }
-
实现效果: 从图中可以看见,加载Qss后再构造函数中无法获取到属性值,也就是说在构造函数中还没生效;
-
注意: 最好是使用qApp设置Qss,否则如果使用this设置则其它窗口无法获取到qss。
1.4 QSpinBox样式
QSpinBox {background-color: rgb(0, 255, 255);border-image: url(:/C:/Users/MHF/Pictures/1.png); /* 输入部分背景*/color: rgb(255, 255, 255);border: 2px solid #FF0000;margin-left: 30px; /* 左边距 */margin-right: 30px; /* 右边距*/
}
/* 设置使用加减图标的样式*/
QAbstractSpinBox::up-button {subcontrol-origin: border;subcontrol-position: right;border: 1px solid grey;width: 30px;height: 30px;right: -30px;background-color: rgb(255, 255, 255);
}QAbstractSpinBox::down-button {subcontrol-origin: border;subcontrol-position: left;border: 1px solid grey;width: 30px;height: 30px;left: -30px;background-color: rgb(255, 255, 255);
}