私はQ_PROPERTY
のエントリを持つウィジェットを使用しています。さて、私は内部マップを持っています。そのリストの各エントリについて、動的プロパティ(名前は"entry1Color"
など)を追加したいと思います。C++ QT5動的プロパティ
setProperty("entry1Color", Qt::green);
経由で動的プロパティを追加できますが、値(Qt::green
)が転送されているという手がかりはありません。 設定値をマップに接続するにはどうすればいいですか?
私はQ_PROPERTY
のエントリを持つウィジェットを使用しています。さて、私は内部マップを持っています。そのリストの各エントリについて、動的プロパティ(名前は"entry1Color"
など)を追加したいと思います。C++ QT5動的プロパティ
setProperty("entry1Color", Qt::green);
経由で動的プロパティを追加できますが、値(Qt::green
)が転送されているという手がかりはありません。 設定値をマップに接続するにはどうすればいいですか?
setProperty
を使用すると、その値はQObjectに直接格納され、property
getterを使用して取得できます。 QVariantを返すので、適切な型にキャストする必要があります。色の例:
QColor color1 = myObject->property("myColor").value<QColor>();
それは明確ではなかった場合には、Q_PROPERTY
で明示的に宣言された特性はproperty
ゲッターと、動的プロパティとまったく同じように、実際にアクセス可能です。これは、QMLエンジンがオブジェクトプロパティをどのように解決してオブジェクトのプロパティにアクセスするかを正確に(単純化すれば)setProperty
とproperty
です。
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がどのように機能し、どのペアにどのような制限があるかを調べることも有益です。
QObjectのインスタンスでQObject :: setPropertyを使用している場合、QObjectインスタンスに内部的に保存されます。
@Dmitriy:明確化とサンプルコードをありがとう。 これまでのところ、setPropertyで設定した値を読み取ることができます。
しかし、これは私が欲しいものではありません。私は静的なQ_PROPERTYエントリのWRITE fn宣言のような、動的なプロパティーセッターによって呼び出されるある種の関数を持っていたいと思います。
私のケースでは、mColors.insert
コールでsetProperty( "entry1Color")を呼び出してdynamic property
を作成します。 値はマップ["entry1Color"]に直接書き込む必要があります。私はまだこれを達成するためのアイデアにつまづいていませんでした。