私はQQmlPropertyMap
クラスをテストしようとしています。私がそれをサブクラス化することができれば、私が望むものに対してはうまくいくかもしれないようです。ドキュメントhereは、サブクラス化のために何をすべきかに関するいくつかの基本的な指示を与えます。また、このドキュメントはQObject
から派生していることを示しています。QQmlPropertyMapのサブクラスでQMLからスロットまたはQ_INVOKABLEを呼び出せません
QtQuick 2.0でQt 5.0.0でQtCreator 2.6.1を使用しています。
マイmain.qml:
import QtQuick 2.0
Rectangle {
width: 360
height: 360
Text {
text: owner.field
anchors.centerIn: parent
}
MouseArea {
anchors.fill: parent
onClicked: {
owner.testFunc();
}
}
}
私のmain.cppに:
#include <QtGui/QGuiApplication>
#include "qtquick2applicationviewer.h"
#include "TestMap.h"
#include <QQmlContext>
int main(int argc, char *argv[])
{
TestMap* map = new TestMap();
QGuiApplication app(argc, argv);
QtQuick2ApplicationViewer viewer;
QQmlContext* ctxt = viewer.rootContext();
ctxt->setContextProperty("owner", map);
viewer.setMainQmlFile(QStringLiteral("qml/TestMap/main.qml"));
viewer.showExpanded();
return app.exec();
}
マイTestMap.h
#ifndef TESTMAP_H
#define TESTMAP_H
#include <QObject>
#include <QQmlPropertyMap>
#include <QDebug>
class TestMap: public QQmlPropertyMap // QObject
{
Q_OBJECT
public:
TestMap(QObject* parent = 0): QQmlPropertyMap(this, parent) // QObject(parent)
{
insert("field", "value"); // Comment this out
}
TestMap(const TestMap& value) { }
virtual ~TestMap() {}
public slots:
void testFunc()
{
qDebug() << "Success!";
}
};
Q_DECLARE_METATYPE(TestMap)
#endif
私が実行すると、私は「値を言ってウィンドウを取得"私が期待しているように。しかし、私は、ウィンドウをクリックしたとき、私は
TypeError: Property 'testFunc' of object TestMap(0xaaa0b8) is not a function
を言ってコンソール出力を取得し、私は同様の問題のために見てきたが、すべての検索結果はQ_OBJECT
マクロを含めるのを忘れて人々についてです。 TestMapファイルのコメントに示されているすべての変更を行い(main.cppとmain.qmlをそのままの状態にしておく)、私はqDebug
というメッセージを受け取るので、コード内で間違っているものでなければなりません。期待する。
私はQ_DECLARE_METATYPE
であるかどうかはわかりません(2-arg protectedコンストラクタは私のためにやるべきだと思いますが)どちらの方法でも動作しません。レコードの
、私は仕事にそれを得るために変更する必要が唯一のものは、以下のとおりです。
1)QObject
の代わりに、QQmlPropertyMap
から派生。
2)にコンストラクタを変更します。
TestMap(QObject* parent = 0): QObject(parent) {}
そして、それはそれです。 main.cpp、main.qml、またはスロット自体について何も変更していないときに動作するので、私はそれが何も問題ではないと結論づけなければなりません。誰かが私が間違っていることを教えてもらえますか?
が、これは明らかにQtのバグです。私がここに提出したバグレポートを見てください:https://bugreports.qt-project.org/browse/QTBUG-29836 – kanders84152