【问题标题】:Qt Custom Widget Plugin Q_Property With Enum带有枚举的 Qt 自定义小部件插件 Q_Property
【发布时间】:2019-07-30 09:37:56
【问题描述】:

在我的自定义设计器小部件插件中,我有一个派生 QProgressBar 的自定义小部件。我有一个字段可以选择确定或不确定的状态。为此,我只是对这两个州进行了枚举。我想通过如下实现 Q_PROPERTY 宏在 QtDesigner 小部件属性区域中使用这些值:

class QDESIGNER_WIDGET_EXPORT QtMaterialProgress : public QProgressBar
{   
    Q_OBJECT
    Q_PROPERTY(QColor progressColor WRITE setProgressColor READ progressColor)
    Q_PROPERTY(QColor backgroundColor WRITE setProgressColor READ backgroundColor)
    Q_PROPERTY(Material::ProgressType progressType WRITE setProgressType READ progressType)
.....

这里还有枚举声明:

enum ProgressType
{
    DeterminateProgress,
    IndeterminateProgress
};

我希望这段代码能够在 QtDesigner 的属性编辑器中生成一个具有两种状态的 QComboBox,但是我没有得到这样的结果。我也尝试将Q_ENUMS(PropertyType) 添加到标题中,但没有成功。

【问题讨论】:

  • 不要使用 Q_ENUMS,使用 Q_ENUM,它对我有用:imgur.com/a/C17lX
  • Q_ENUM(Material::ProgressType) 添加到我的标题中,但仍然没有,我不得不将枚举的父级更改为继承 QObject 的公共类,但我仍然没有在设计器中得到任何列表。你把Q_ENUM()放在哪里了
  • 这是我的测试:github.com/eyllanesc/stackoverflow/tree/master/49172604,如果你分享一个可以复制的代码,它会帮助更多的人,但这种神秘的态度不会有太大的帮助,我建议你提供一个minimal reproducible example
  • @eyllanesc 工作正常,如果你发布它,我会接受它和赏金。

标签: c++ qt qt5 qt-designer


【解决方案1】:

您必须使用Q_ENUM(不是Q_ENUMS,因为它已从Qt 5.5 中弃用:https://doc.qt.io/qt-5/whatsnew55.html),如以下示例所示:

#ifndef TESTWIDGET_H
#define TESTWIDGET_H

#include <QWidget>

class TestWidget : public QWidget
{
    Q_OBJECT
    Q_PROPERTY(EnumTest test READ test WRITE setTest)
public:
    TestWidget(QWidget *parent = 0);

    enum EnumTest { ENUM0, ENUM1, ENUM2, ENUM3 };
    Q_ENUM(EnumTest)

    EnumTest test() const;
    void setTest(const EnumTest &test);

private:
    EnumTest mTest;
};

#endif

在下面的link可以找到完整的例子

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多