Qt быстрый проект - как вызвать функцию cpp в файле qml? - PullRequest
1 голос
/ 30 июня 2011

Я создал быстрый проект в Qt, выбранный из мастера в начале, когда запускается создатель Qt. 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);

Лучше не создавать проект без мастера проектов?

Спасибо

1 Ответ

5 голосов
/ 30 июня 2011

Обычно этот мастер используется для создания проектов только в QML. Средство просмотра QmlApplication - это просто облегченная оболочка C ++ вокруг вашего файла QML, поэтому создается двоичный файл и загружается файл 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 вы можете рекламировать глобальные типы QML через cpp ...

Конечно, вы также можете повторно использовать QmlApplicationViewer. Mainclass QmlApplicationViewer является производным от QDeclarativeView, поэтому у вас есть прямой доступ к контексту в этом классе.

Так же, как в примере выше, должно быть возможно использовать:

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

где-нибудь в конструкторе QmlApplicationViewer или позже (пока не пробовал, дайте мне знать, если он не работает).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...