如何在自定义小部件插件上使用qss

万春

我遵循了Qt文档的指南,并完成了一个自定义小部件插件。现在,它可以在QtDesigner中成功运行。这是我引用的示例:

https://doc.qt.io/qt-5/designer-creating-custom-widgets.html

这是三个指针的时钟小部件。

时钟图像

我想通过qss更改手的颜色,就像这样:

Clock {
  hour-hand: #333333;
  minute-hand: #f7f7f7;
  second-hand: #cccccc;
}

我阅读了有关QStyle的文档,有关QStyleOption的文档和有关QStylePlugin的文档。但是我还没有弄清楚它们之间的关系,而且我不知道应该使用哪种Class解决我的问题。

永乐

Qt StyleSheet专用于绘制预定义的小部件,因为其实现是Qt专用API的QStyle,因此无法预定义新属性。但是在Qt StyleSheet属性中,在这种情况下可以使用qproperty-foo,例如,设置时针的颜色,为此,您必须创建QProperty:

模拟时钟

#ifndef ANALOGCLOCK_H
#define ANALOGCLOCK_H

#include <QWidget>
#include <QtUiPlugin/QDesignerExportWidget>

class QDESIGNER_WIDGET_EXPORT AnalogClock : public QWidget
{
    Q_OBJECT
    Q_PROPERTY(QColor hourColor READ hourColor WRITE setHourColor)
public:
    explicit AnalogClock(QWidget *parent = nullptr);
    QColor hourColor() const;
    void setHourColor(QColor hourColor);
protected:
    void paintEvent(QPaintEvent *event) override;
private:
    QColor m_hourColor;
};

#endif

模拟时钟

#include "analogclock.h"

#include <QMouseEvent>
#include <QPainter>
#include <QTime>
#include <QTimer>

AnalogClock::AnalogClock(QWidget *parent)
    : QWidget(parent), m_hourColor(QColor(127, 0, 127))
{
    QTimer *timer = new QTimer(this);
    connect(timer, &QTimer::timeout, this, QOverload::of(&QWidget::update));
    timer->start(1000);

    setWindowTitle(tr("Analog Clock"));
    resize(200, 200);
}

QColor AnalogClock::hourColor() const
{
    return m_hourColor;
}

void AnalogClock::setHourColor(QColor hourColor)
{
    if (m_hourColor == hourColor)
        return;
    m_hourColor = hourColor;
    update();
}

void AnalogClock::paintEvent(QPaintEvent *)
{
    static const QPoint hourHand[3] = {
        QPoint(7, 8),
        QPoint(-7, 8),
        QPoint(0, -40)
    };
    static const QPoint minuteHand[3] = {
        QPoint(7, 8),
        QPoint(-7, 8),
        QPoint(0, -70)
    };

    QColor minuteColor(0, 127, 127, 191);

    int side = qMin(width(), height());
    QTime time = QTime::currentTime();

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.translate(width() / 2, height() / 2);
    painter.scale(side / 200.0, side / 200.0);

    painter.setPen(Qt::NoPen);
    painter.setBrush(m_hourColor);

    painter.save();
    painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)));
    painter.drawConvexPolygon(hourHand, 3);
    painter.restore();

    painter.setPen(m_hourColor);

    for (int i = 0; i < 12; ++i) {
        painter.drawLine(88, 0, 96, 0);
        painter.rotate(30.0);
    }

    painter.setPen(Qt::NoPen);
    painter.setBrush(minuteColor);

    painter.save();
    painter.rotate(6.0 * (time.minute() + time.second() / 60.0));
    painter.drawConvexPolygon(minuteHand, 3);
    painter.restore();

    painter.setPen(minuteColor);

    for (int j = 0; j < 60; ++j) {
        if ((j % 5) != 0)
            painter.drawLine(92, 0, 96, 0);
        painter.rotate(6.0);
    }
}

然后您可以使用:

AnalogClock {
  qproperty-hourColor: #333333;
}

在此处输入图片说明

注意:默认情况下,QProperty的DESIGNABLE为true,因此您还可以从属性编辑器修改hourColor属性:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在自定义帖子类型小部件插件的最后添加更多按钮

来自分类Dev

Android 自定义视图:如何在单个小部件上设置单击侦听器

来自分类Dev

如何在自定义小部件中显示QChartView?

来自分类Dev

如何在 Flutter 中自定义 Slider 小部件?

来自分类Dev

如何在不导入自定义小部件类包的情况下使用自定义小部件和uic.loadUi?

来自分类Dev

如何在NavSearch之类的自定义小部件中使用预输入

来自分类Dev

如何在Xamarin小部件中使用自定义行创建ListView

来自分类Dev

如何自定义android小部件

来自分类Dev

如何创建自定义的fld sdk小部件,重建flutter和使用新的小部件

来自分类Dev

从qtdisgner访问自定义qtdesigner插件的子小部件

来自分类Dev

如何在sitefinity上向自定义窗口小部件添加长文本字段?

来自分类Dev

列表小部件的Sitefinity自定义字段以及如何在MVC视图模板中使用它们

来自分类Dev

列表小部件的Sitefinity自定义字段以及如何在MVC视图模板中使用它们

来自分类Dev

如何在应用小部件中创建类似于Google Play音乐小部件中的自定义视图?

来自分类Dev

如何在C语言中的GTK3中创建自定义小部件?

来自分类Dev

如何在QT Creator中升级自定义小部件

来自分类Dev

如何在自定义CKEditor小部件中使a标签可编辑?

来自分类Dev

如何在Flutter中将自定义小部件项目填充到ListView中?

来自分类Dev

如何在KV lang中设置来自父项的自定义窗口小部件的文本?

来自分类Dev

如何在Flutter中自定义Slider小部件的拇指颜色?

来自分类Dev

如何在Django表单中为窗口小部件提供自定义名称

来自分类Dev

如何在Qt / C ++中构建自定义的本机OSX Webkit小部件?

来自分类Dev

SAP HYBRIS [Y]:如何在后台创建我们的自定义小部件

来自分类Dev

如何制作自己的自定义桌面小部件?

来自分类Dev

在Qt Designer中使用PySide自定义小部件

来自分类Dev

Qt Designer自定义小部件:使用标志

来自分类Dev

使用自定义窗口小部件填充QListWidget

来自分类Dev

在元小部件中使用自定义值类型

来自分类Dev

如何为yii2 ListView小部件使用自定义过滤器?

Related 相关文章

  1. 1

    如何在自定义帖子类型小部件插件的最后添加更多按钮

  2. 2

    Android 自定义视图:如何在单个小部件上设置单击侦听器

  3. 3

    如何在自定义小部件中显示QChartView?

  4. 4

    如何在 Flutter 中自定义 Slider 小部件?

  5. 5

    如何在不导入自定义小部件类包的情况下使用自定义小部件和uic.loadUi?

  6. 6

    如何在NavSearch之类的自定义小部件中使用预输入

  7. 7

    如何在Xamarin小部件中使用自定义行创建ListView

  8. 8

    如何自定义android小部件

  9. 9

    如何创建自定义的fld sdk小部件,重建flutter和使用新的小部件

  10. 10

    从qtdisgner访问自定义qtdesigner插件的子小部件

  11. 11

    如何在sitefinity上向自定义窗口小部件添加长文本字段?

  12. 12

    列表小部件的Sitefinity自定义字段以及如何在MVC视图模板中使用它们

  13. 13

    列表小部件的Sitefinity自定义字段以及如何在MVC视图模板中使用它们

  14. 14

    如何在应用小部件中创建类似于Google Play音乐小部件中的自定义视图?

  15. 15

    如何在C语言中的GTK3中创建自定义小部件?

  16. 16

    如何在QT Creator中升级自定义小部件

  17. 17

    如何在自定义CKEditor小部件中使a标签可编辑?

  18. 18

    如何在Flutter中将自定义小部件项目填充到ListView中?

  19. 19

    如何在KV lang中设置来自父项的自定义窗口小部件的文本?

  20. 20

    如何在Flutter中自定义Slider小部件的拇指颜色?

  21. 21

    如何在Django表单中为窗口小部件提供自定义名称

  22. 22

    如何在Qt / C ++中构建自定义的本机OSX Webkit小部件?

  23. 23

    SAP HYBRIS [Y]:如何在后台创建我们的自定义小部件

  24. 24

    如何制作自己的自定义桌面小部件?

  25. 25

    在Qt Designer中使用PySide自定义小部件

  26. 26

    Qt Designer自定义小部件:使用标志

  27. 27

    使用自定义窗口小部件填充QListWidget

  28. 28

    在元小部件中使用自定义值类型

  29. 29

    如何为yii2 ListView小部件使用自定义过滤器?

热门标签

归档