2

最近、リーダーから Qt と qml のポート作業を 1 つ割り当てられました。私たちの古いプロジェクトは Qt 4.8 で動作し、Qt quick 1.0 を使用しています。Qt4 では、QML は、サポートするオペレーティング システムのインターフェイス作成に使用されるデフォルトの GUI コントロールをネイティブに提供しません。オーナー描画コントロールの作成を節約するために、すべての GUI のベースとして Qt Components for Desktop プロジェクトを使用して、Qt4.8 で OS 標準の (および依存する) ルック アンド フィールを作成することにしました。Qt コンポーネントは Qt Quick Controls に名前が変更され、Qt5.x 用に開発されました。Qt コンポーネントは、メニュー、ツールバー、ボタンを提供します。Qt5.xにはApplicationWindowがあるため、Qtコンポーネントを削除します。

main.qml ファイル:

import QtQuick.Controls 1.0

ApplicationWindow {
    title: "My Application"

    Button {
        text: "Push Me"
        anchors.centerIn: parent
    }
}

Main.cpp ファイル:

#include <QApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QQmlApplicationEngine engine("main.qml");
    QObject *topLevel = engine.rootObjects().value(0);
    QQuickWindow *window = qobject_cast<QQuickWindow *>(topLevel);
    if ( !window ) {
        qWarning("Error: Your root item has to be a Window.");
        return -1;
    }
    window->show();
    return app.exec();
}

しかし、私たちの古いプロジェクトでは、メイン関数に、MainWindowメイン ウィンドウを実装し、ソースとして見つけmain.qmlて作成QDeclarativeViewするものがありますmain.qml

#include <QApplication>
#include <QQmlApplicationEngine>

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

    MainWindow w;
    w.show();
    ……
}

のコンストラクタでMainWindow:

#include <QApplication>
#include <QQmlApplicationEngine>

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
    ……
    DeclarativeView* pView = new DeclarativeView;
    setCentralWidget(pView);
    ……
}

Declarativeviewは、その親へのポインターをDeclarativeView継承して保持するクラスを実装します。メニューを動的に変更できます。1 つのメニュー項目をクリックすると、1 つのダイアログが作成され、ダイアログは qml ファイルまたは Qt ui ファイルで定義されます。QDeclarativeViewQWidgetMainWindow

これで、Qml ファイルのすべての作業が完了しました。Qt コンポーネントを QtQuick.Controls 1.0 に置き換えます。QQmlApplicationEngineしかし、ファイルをロードしてメニューを動的に変更する方法、qt ui クラスウィジェットQQuickWindowをロードする方法、新しい qml ファイルをロードして新しいウィンドウを開く方法がわかりません。

新しいプロジェクトでウィジェットを使用する必要はないと思います。助けてもらえますか?どうもありがとうございました。

4

1 に答える 1