2017-03-02 6 views
0

私はQ_PROPERTYのエントリを持つウィジェットを使用しています。さて、私は内部マップを持っています。そのリストの各エントリについて、動的プロパティ(名前は"entry1Color"など)を追加したいと思います。C++ QT5動的プロパティ

setProperty("entry1Color", Qt::green);経由で動的プロパティを追加できますが、値(Qt::green)が転送されているという手がかりはありません。 設定値をマップに接続するにはどうすればいいですか?

答えて

0

setPropertyを使用すると、その値はQObjectに直接格納され、property getterを使用して取得できます。 QVariantを返すので、適切な型にキャストする必要があります。色の例:

QColor color1 = myObject->property("myColor").value<QColor>(); 

それは明確ではなかった場合には、Q_PROPERTYで明示的に宣言された特性はpropertyゲッターと、動的プロパティとまったく同じように、実際にアクセス可能です。これは、QMLエンジンがオブジェクトプロパティをどのように解決してオブジェクトのプロパティにアクセスするかを正確に(単純化すれば)setPropertypropertyです。

0

QObjectのインスタンスでQObject :: setPropertyを使用している場合、QObjectインスタンスに内部的に保存されます。

私はあなたがメンバ変数として値を持つQMapとして実装したいと思っています。

testclass.h

#ifndef TESTCLASS_H 
#define TESTCLASS_H 

#include <QObject> 
#include <QMap> 
#include <QColor> 

class TestClass : public QObject 
{ 
    Q_OBJECT 
public: 
    explicit TestClass(QObject *parent = 0); 

    // mutators 
    void setColor(const QString& aName, const QColor& aColor); 
    QColor getColor(const QString &aName) const; 

private: 
    QMap<QString, QColor> mColors; 
}; 

#endif // TESTCLASS_H 

testclass.cpp

#include "testclass.h" 

TestClass::TestClass(QObject *parent) : QObject(parent) 
{ 

} 

void TestClass::setColor(const QString &aName, const QColor &aColor) 
{ 
    mColors.insert(aName, aColor); 
} 

QColor TestClass::getColor(const QString &aName) const 
{ 
    return mColors.value(aName); 
} 

main.cppに

#include "mainwindow.h" 

#include <QApplication> 
#include <QDebug> 

#include "testclass.h" 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    TestClass testClass; 
    testClass.setColor("entry1Color", Qt::green); 

    qDebug() << testClass.getColor("entry1Color"); 


    return a.exec(); 
} 
:それはどのように実装できるかをここで

しかし、QMapがどのように機能し、どのペアにどのような制限があるかを調べることも有益です。

0

QObjectのインスタンスでQObject :: setPropertyを使用している場合、QObjectインスタンスに内部的に保存されます。

@Dmitriy:明確化とサンプルコードをありがとう。 これまでのところ、setPropertyで設定した値を読み取ることができます。

しかし、これは私が欲しいものではありません。私は静的なQ_PROPERTYエントリのWRITE fn宣言のような、動的なプロパティーセッターによって呼び出されるある種の関数を持っていたいと思います。

私のケースでは、mColors.insertコールでsetProperty( "entry1Color")を呼び出してdynamic propertyを作成します。 値はマップ["entry1Color"]に直接書き込む必要があります。私はまだこれを達成するためのアイデアにつまづいていませんでした。

関連する問題