0
根据http://doc.qt.io/qt-5/qtqml-cppintegration-interactqmlfromcpp.html一章“调用QML方法”,我尝试从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