我无法将标志用作 QT 自定义小部件属性类型。预期的属性未显示在 QT Designer 属性编辑器上。
代码如下:
#ifndef SVBASICDEMO_H
#define SVBASICDEMO_H
#include <QString>
#include <QtUiPlugin/QDesignerExportWidget>
#include <QWidget>
#include <QLabel>
#include "svbasicwidget.h"
QT_BEGIN_NAMESPACE
namespace Company {
namespace Product {
namespace Widget {
namespace Basic {
class QDESIGNER_WIDGET_EXPORT SvBasicDemo : public SvBasicWidget
{
Q_OBJECT
Q_FLAGS(SvBasicDemo::AccessTypes)
Q_PROPERTY(QString url_prop MEMBER url_prop NOTIFY propertyChange)
Q_PROPERTY(Priority enum_prop MEMBER enum_prop NOTIFY propertyChange)
Q_PROPERTY(AccessTypes flag_prop MEMBER flag_prop NOTIFY propertyChange)
Q_PROPERTY(Qt::Alignment flag_prop_2 MEMBER flag_prop_2 NOTIFY propertyChange)
Q_SIGNALS:
void propertyChange();
public slots:
//更新属性的槽
void updateProperty();
public:
SvBasicDemo(QWidget *parent = 0);
virtual void refresh_binding_cb();
virtual QString help_info() const;
enum Priority { High, Low, VeryHigh, VeryLow };
Q_ENUM(Priority)
enum AccessType { Read = 0x1, Write = 0x2 };
Q_DECLARE_FLAGS(AccessTypes, AccessType)
private:
QString url_prop;
Priority enum_prop;
AccessTypes flag_prop;
Qt::Alignment flag_prop_2;
QLabel label;
};
Q_DECLARE_OPERATORS_FOR_FLAGS(SvBasicDemo::AccessTypes)
}
}
}
}
QT_END_NAMESPACE
#endif
您可以看到属性 enum_prop(使用自定义枚举)和 flag_prop_2(使用内置标志 Qt::Alignment)按预期工作。但是缺少属性 flag_prop。
我研究了“%QT_ROOT%\Qt5.6.0\5.6\msvc2013\include\QtWidgets\qgraphicsview.h”中的代码。并没有弄清楚为什么。
谁能给我一些提示,说明为什么它不能按预期工作?提前致谢。