http://doc.qt.io/qt-5/qtqml-cppintegration-interactqmlfromcpp.html「QMLメソッドの呼び出し」の章では、main.qml内のC++からbbox関数を呼び出そうとしています。ここでQML関数の呼び出しに失敗しました
は私のコードです:
main.qml
import QtQuick 2.0
import QtQuick.Window 2.0
import QtLocation 5.6
import QtPositioning 5.6
Window {
width: 512
height: 512
visible: true
Item{
anchors.fill: parent
Plugin{
id: osmplugin
name: "osm"
}
Map {
anchors.fill: parent
id: map
plugin: osmplugin;
zoomLevel: (maximumZoomLevel - minimumZoomLevel)/2
center {
// The Qt Company in Oslo
latitude: 59.9485
longitude: 10.7686
}
}
Component.onCompleted:{
console.log("zoomlevel : " + map.zoomLevel)
console.log("Visible region : " + map.visibleRegion)
}
function bbox(){
return map.visibleRegion;
}
}
}
とmain.cppに
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQuickItem>
#include <QGeoRectangle>
#include <QQmlComponent>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
QQmlComponent component(&engine, "qrc:/main.qml");
QObject *map = component.create();
QVariant ret;
bool ok = QMetaObject::invokeMethod(map, "bbox", Qt::DirectConnection, Q_RETURN_ARG(QVariant, ret));
if (!ok){
qWarning("Fail to call qml method");
}
QGeoRectangle rect = qvariant_cast<QGeoRectangle>(ret);
return app.exec();
}
私は、次のエラーメッセージが出ます:
「QMetaObject ::は、invokeMethodを:そのようなメソッドはありませんQQuickWindow :: bbox() "
bbox機能が見つからないようです。問題を見つけるのを助けてくれますか?
ありがとうございます。
まあBBOX(:オブジェクト名使用してオブジェクトを取得するC++で
を:
をしてメソッドを呼び出しますあなたのマップのメソッドではありません(C++)。 ItemからWindowに移動するだけです。 –
正解、ありがとう、それは動作します。だから、もしItemの中でこの関数を(例えば)Itemのその(サブ)関数へのアクセス権を持つ正しいコードにする必要があるのであれば? – kontiki