Qt Custom Widget Plugin Q_Property With Enum

时间:2018-03-08 12:01:43

标签: c++ qt qt5 qt-designer

在我的自定义设计器小部件插件中,我有一个派生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)添加到标题中,但没有运气。

1 个答案:

答案 0 :(得分:2)

您必须使用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中,您可以找到完整的示例

enter image description here