4

Qt5とQtQuick2の組み合わせにはいくつかの問題があります。多くのQWidgetベースのクラスのいくつかを使用したいときはいつでも、最初に次の問題に遭遇します。

QApplicationQt5の代わりに使用する必要がありますQGuiApplication。それは簡単に変更できますよね?

だから今私は使ってQApplicationいますが、QWidgetベースのクラスを使おうとすると、プログラムがクラッシュするか、意味のないエラーメッセージが表示されます。

では、Qt5で古いQWidgetsをどのように使用する必要がありますか?Qt5の最適なソリューションではないことはわかっていますが、非常に便利です...

PS私はすべてのプラットフォーム用にLinuxでアプリを開発しています。
また、自動生成されたQtQuick2ApplicationViewerクラスを使用して、QtQuick2.0ベースのアプリケーションをレンダリングしています。

4

2 に答える 2

4

Qt 5.1(そしておそらくこれから)では、QWidget::createWindowContainerを使用する必要があります。アプリケーションはQWidgetベースのアプリケーションであり、QMLをQWidgets内に配置する必要があります。QWidgetsをQMLアプリケーションに配置することはサポートされていません。このブログエントリを参照してください。

フォームクラスがあり、qmlをコンテナウィジェットに入れたい場合。

このQMLをお持ちの場合:

import QtQuick 2.0

Rectangle {
    property alias text: textItem.text
    width: 156
    height: 35
    Text {
        width: 150
        height: 20
        text: qsTr("Hello World")
        id: textItem
    }
}

myqml.qmlというファイルで、そのファイルへのパスをリソースファイルのqmlプレフィックスに挿入します。

次に、フォームコンストラクターに入力します。

ui->setupUi(this); // as normal
QQuickView* view = new QQuickView();
QWidget* widget = QWidget::createWindowContainer(view, ui->container);
view->setSource(QUrl("qrc:/qml/myqml.qml"));
if(view->status()!=QQuickView::Ready)
    qDebug("can't initialise view");
widget->setMinimumSize(500,100);
QQuickItem* container = view->rootObject();

次に、QMLと対話する場合:

container->setProperty("text", "Hello alternate universe");
于 2013-11-09T12:11:26.880 に答える
3

これは既知のバグのようです: https ://bugreports.qt.io/browse/QTBUG-25​​643

それも可能な解決策/回避策へのリンクを持っているようですが、私はそれらをチェックしませんでした。

QWidgetsと「それらは最良のソリューションではない」について:まず第一に、完全なデスクトップQtQuickコンポーネントを備えた将来のQt5.1(またはそれがどのバージョンになるか)まで、それらは通常のデスクトップアプリにとって唯一の賢明なオプションであり、オプションは定義上最良のオプションです;)

しかし、将来的にもQWidgetsはQt5アプリにとって100%有効な選択肢です。彼らとの唯一のことは、彼らがあまり成長する可能性が低いということです、それであなたが今持っているものはあなたが彼らと一緒に持っているであろう最高のものです。それが問題ない場合は、それらが選択するソリューションです。

于 2012-12-22T20:36:55.527 に答える