1

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

qmlapplicationvierwer 只有几个功能:

QApplication 应用程序(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);

更好的方法不是在没有项目向导的情况下创建项目?

谢谢

4

1 回答 1

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 构造函数中的某个地方或之后(暂时没有尝试,如果它不起作用,请告诉我)。

于 2011-06-30T09:42:45.453 回答