Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 带有枚举的Qt自定义小部件插件Q_属性_C++_Qt_Qt5_Qt Designer - Fatal编程技术网

C++ 带有枚举的Qt自定义小部件插件Q_属性

C++ 带有枚举的Qt自定义小部件插件Q_属性,c++,qt,qt5,qt-designer,C++,Qt,Qt5,Qt Designer,在我的自定义设计器小部件插件中,我有一个派生QProgressBar的自定义小部件。我有一个字段可以选择确定状态或不确定状态。为此,我简单地用两个状态创建了一个枚举。我希望通过实现Q_属性宏在QtDesigner小部件属性区域中使用这些值,如下所示: class QDESIGNER_WIDGET_EXPORT QtMaterialProgress : public QProgressBar { Q_OBJECT Q_PROPERTY(QColor progressColor

在我的自定义设计器小部件插件中,我有一个派生QProgressBar的自定义小部件。我有一个字段可以选择确定状态或不确定状态。为此,我简单地用两个状态创建了一个枚举。我希望通过实现Q_属性宏在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声明:

enum ProgressType
{
    DeterminateProgress,
    IndeterminateProgress
};

我希望这段代码在QtDesigner的属性编辑器中生成一个具有两种状态的QComboBox,但我并没有得到这样的结果。我还尝试将
Q_ENUM(PropertyType)
添加到标题中,但运气不佳。

您必须使用
Q_ENUM
(不是
Q_ENUM
,因为它在Qt 5.5:中被弃用),如下示例所示:

#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
\ifndef TESTWIDGET\u H
#定义TESTWIDGET\u H
#包括
类TestWidget:publicqwidget
{
Q_对象
Q_属性(EnumTest读取测试写入设置测试)
公众:
TestWidget(QWidget*parent=0);
enum EnumTest{ENUM0,ENUM1,ENUM2,ENUM3};
Q_枚举(枚举测试)
枚举测试()常量;
无效设置测试(常量枚举测试和测试);
私人:
枚举测试;
};
#恩迪夫


在下面的示例中,您可以找到一个完整的示例

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