[英]Qt get stylesheet border color
QPushButton#PBack {
background: #9A9AFF;
font: bold 28pt "Brutal Type";
color: #000000;
border: 3px solid #000000;
border-radius: 25px;
}
QPushButton#PBack:disabled {
background-color: #bdbdbd;
border-color: #787878;
}
如何获取paintEvent内部的边框颜色?
void W_PBackButton::paintEvent(QPaintEvent* event)
{
// Here i use constants
if (isEnabled() == true)
painter.setPen(QPen(QBrush(_enabled), 3));
else
painter.setPen(QPen(QBrush(_disabled), 3));
painter.fillPath(path, palette().base());
painter.drawPath(path);
}
在示例中,我使用常量,但是如何从调色板或样式中获取颜色值?
现在,鉴于事实问题充满了更多信息,我想我可以提供一些答案。 好吧,我认为您不需要尝试获取Qt声明的某些“边界”属性。 这将更加困难。 相反,您可以定义自己的自定义属性,例如“ borderColor”(或其中的几个,例如厚度,形状等),然后通过样式表“ qproperty-borderColor”进行设置。 关于自定义属性的定义,您可以在此处阅读更多信息: https : //doc.qt.io/qt-5/properties.html (示例为https://doc.qt.io/qt-5/ properties.html#a-simple-example )。
以下代码说明了设置所需属性的可能方法。 首先,您必须定义自己的类,以继承要在其上设置属性的类。 假设它是QPushButton的子级:
#include <QPushButton>
class CustomButton
: public QPushButton
{
Q_OBJECT
Q_PROPERTY(QColor borderColor READ GetBorderColor WRITE SetBorderColor)
public:
CustomButton(QWidget *parent = nullptr);
virtual ~CustomButton();
QColor GetBorderColor() const;
void SetBorderColor(const QColor& color);
protected:
virtual void paintEvent(QPaintEvent* event) override;
private:
QColor m_borderColor;
};
#include "CustomButton.h"
#include <QDebug>
CustomButton::CustomButton(QWidget *parent)
: QPushButton(parent)
{
}
CustomButton::~CustomButton()
{
}
QColor CustomButton::GetBorderColor() const
{
return m_borderColor;
}
void CustomButton::SetBorderColor(const QColor& color)
{
m_borderColor = color;
qDebug() << m_borderColor;
}
void CustomButton::paintEvent(QPaintEvent* event)
{
QPushButton::paintEvent(event);
// Do whatever you like with m_borderColor and any other properties.
}
最后,您必须将Qt Creator中的QPushButton提升为您自己的CustomButton。 关于小部件促销,您可以在这里阅读有关内容: https : //doc.qt.io/archives/qt-4.8/designer-using-custom-widgets.html#promoting-widgets
并且,当您完成所有设置后,可以轻松地为新引入的按钮声明样式表:
#pushButton {
qproperty-borderColor: #123456;
}
也许这并不是您最初打算实现目标的方式,但看起来声明自定义样式表属性和使用小部件升级将帮助您实现目标,而不会受到任何黑客攻击,并且Qt是为使用Qt而构建的。 希望它对您有帮助。 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.