http://doc.qt.io/qt-5/qtqml-cppintegration-interactqmlfromcpp.html "Invoking QML Methods"장에 따르면 C++에서 main.qml 내의 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++). 항목에서 창으로 이동하십시오. –
정답, 고마워, 작동한다. 그래서 Item 내에서이 함수를 허용해야한다면 (예를 들어) Item의 해당 (하위) 함수에 대한 액세스 권한이 올바른 코드일까요? – kontiki