QTカスタムウィジェットのプロパティタイプとしてフラグを使用するのに問題があります。予想されるプロパティは、QT Designerのプロパティエディタに表示されません。QTでカスタムウィジェットのプロパティタイプとしてフラグを使用するにはどうすればよいですか?
コードは以下の通りです:
#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
qtのデザイナーのプロパティエディタでの結果は以下のように示されている:
あなたは使用が組み込まれて(プロパティenum_prop(カスタム列挙型を使用)とflag_prop_2を見ることができますQt :: Alignmentフラグ)は期待どおりに動作します。しかし、プロパティflag_propがありません。
私は "%QT_ROOT%\ Qt5.6.0 \ 5.6 \ msvc2013 \ include \ QtWidgets \ qgraphicsview.h"のコードを調べています。
誰も私がなぜそれが期待どおりに動作しないのかについてのヒントを教えてもらえますか?前もって感謝します。
を使用すると、メタオブジェクトモデルへの根本的な列挙型を公開する必要があるのかもしれません。 'Q_ENUM(AccessType)'を追加してみてください –
@king_nakはまだ動作しません – ricky