C++ 带有枚举的Qt自定义小部件插件Q_属性
在我的自定义设计器小部件插件中,我有一个派生QProgressBar的自定义小部件。我有一个字段可以选择确定状态或不确定状态。为此,我简单地用两个状态创建了一个枚举。我希望通过实现Q_属性宏在QtDesigner小部件属性区域中使用这些值,如下所示: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
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,如果你发布它,我会接受它和赏金。