Qt快速项目 - 如何在qml文件中调用c ++函数?

时间:2011-06-29 21:38:08

标签: qt qml

我在Qt中创建了快速项目,在Qt创建者启动时从开始时的向导中选择。 Qt创建者创建项目。主项目中有qmlapplicationvierwer子项目和qml文件。我想在项目中添加新的cpp源代码和头文件(MainMenu.cpp和MainMenu.h),然后在main.qml文件中调用这些文件中的函数。 如何在qmlapplicationviewer中注册新类型并从ManiMenu调用函数?

qmlapplicationvierwer功能很少:

QApplication app(argc,argv);

QmlApplicationViewer viewer;
viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
viewer.setMainQmlFile(QLatin1String("qml/PUTest/main.qml"));
viewer.showExpanded();

return app.exec();

viewer.addImportPath(const string &path);

更好的方法是没有项目向导创建项目吗?

由于

1 个答案:

答案 0 :(得分:5)

通常,您使用此向导来创建仅限QML的项目。 QmlApplication查看器只是一个围绕QML文件的轻量级C ++包装器,因此生成二进制文件并加载QML文件。

自己做的事情并不多,请参阅:

https://doc.qt.io/archives/qt-4.7/qtbinding.html

#include <QApplication>
#include <QDeclarativeView>
#include <QDeclarativeContext>

int main(int argc, char *argv[])
{
 QApplication app(argc, argv);

 QDeclarativeView view;
 QDeclarativeContext *context = view.rootContext();
 context->setContextProperty("backgroundColor",
                             QColor(Qt::yellow));

 view.setSource(QUrl::fromLocalFile("main.qml"));
 view.show();

 return app.exec();
}

使用setContextProperty,您可以通过cpp ...

广告全局QML类型

当然您也可以重用QmlApplicationViewer。 Mainclass QmlApplicationViewer派生自QDeclarativeView,因此您可以直接访问此类中的上下文。

所以在上面的例子中,应该可以使用:

QDeclarativeContext *context = this.rootContext();
context->setContextProperty("backgroundColor", QColor(Qt::yellow));

在QmlApplicationViewer结构中的某个地方或之后(暂时没有尝试,请告诉我它是否无效)。