c++ - Qt 获取样式表边框颜色

标签 c++ qt

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);
}

在示例中我使用常量,但如何从调色板或样式中获取颜色值?

需要绘制三角形按钮
enter image description here

最佳答案

现在,鉴于事实问题填写了更多信息,我想我可以提供一些答案。好吧,我认为您不需要尝试获取 Qt 声明的某些“边框”属性。这会困难得多。相反,您可以定义自己的自定义属性,例如“borderColor”(或其中的几个,例如厚度、形状等),并通过样式表这样设置:“qproperty-borderColor”。关于自定义属性的定义,您可以在此处阅读更多信息:https://doc.qt.io/qt-5/properties.html(例如 https://doc.qt.io/qt-5/properties.html#a-simple-example )。

以下代码说明了设置所需属性的可能方式。首先,您必须定义自己的类来继承要设置属性的类。假设它是 QPushButton 的 child :

#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。关于widgets推广,你可以在这里阅读:https://doc.qt.io/archives/qt-4.8/designer-using-custom-widgets.html#promoting-widgets

当您设置好所有内容后,您可以轻松地为新引入的按钮声明样式表:

#pushButton {
    qproperty-borderColor: #123456;
}

也许这不是您最初想要实现目标的方式,但看起来声明自定义样式表属性和使用小部件的提升将帮助您实现您的目标而无需任何黑客攻击,并且在某种程度上 Qt 被构建为使用。希望对您有所帮助。 :)

关于c++ - Qt 获取样式表边框颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56441849/

相关文章:

android - 使用Qt和Java在sqlite中保存和检索图片

c++ - 如何写一个模板类来存放不同的模板类

c++ - 中断处理程序中的浮点运算(PowerPC、VxWorks)

javascript - 命名空间 QScriptEngine 扩展

qt - 自定义小部件 : How to implement hover and pressed states 的 QSS 属性

c++ - 如何用一个结果集处理程序消除多个相似的 sql 查询?

LLVM 库的 C++ API 生成太多警告

c++ - 网格引擎集群+OpenCV : strange behaviour

c++:我正在尝试颠倒字符串中单词的顺序(不是整个字符串)

c++ - QPainterPath 对象上的动画