1

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);

より良い方法は、プロジェクトウィザードなしでプロジェクトを作成しないことですか?

ありがとう

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 を再利用することもできます。メインクラス QmlApplicationViewer は QDeclarativeView から派生しているため、このクラスのコンテキストに直接アクセスできます。

したがって、上記の例のように、次を使用できるはずです。

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

QmlApplicationViewer コストラクタまたはその後のどこか (今のところ試していません。動作しない場合はお知らせください)。

于 2011-06-30T09:42:45.453 に答える