Qml

[QT] QT学習:QQuickWidgetとQQuickViewの使用



Qt Learning Using Qquickwidget



QQuickWidgetとQQuickViewの両方を使用してqmlファイルをロードし、インターフェイスを表示できますが、これまでのところ、2つの違いを理解していません。ウィジェットウィンドウプログラミングと組み合わせることができるのは2つだけです。次の例は、混合プログラミングを使用する場合の2つのコントロールの違いを記録しています。

(1)QQuickwidgetを使用します。



qmlファイルは次のとおりです。



import QtQuick 2.0 import QtQuick 2.2 Rectangle { id: page width: 500 height: 200 color: 'red' }

qmlファイルをロードします。

mainMapBoxWidget = new QQuickWidget(this) mainMapBoxWidget->setResizeMode(QQuickWidget::SizeRootObjectToView) mainMapBoxWidget->setSource(QUrl('qrc:/files/resource/file/mapBoxGlView.qml')) mainMapBoxWidget->resize(MAIN_DISPALY_WIDTH,MAIN_DISPALY_HEIGH) mainMapBoxWidget->show()

結果のプログラム(メインウィンドウには2つの列があり、追加されたmainmapboxウィジェットは2つの列をカバーしていません):



(2)クイックビューを使用する:


qmlファイルを変更しないでください。

mainMapBoxView = new QQuickView() mainMapBoxWindow = QWidget::createWindowContainer(mainMapBoxView, this) mainMapBoxWindow->resize(MAIN_DISPALY_WIDTH,MAIN_DISPALY_HEIGH) mainMapBoxView->setResizeMode(QQuickView::SizeRootObjectToView) mainMapBoxView->setSource(QUrl('qrc:/files/resource/file/mapBoxGlView.qml')) mainMapBoxWindow->show()

新しく追加されたmainmzpboxwindowでカバーされている、上部と下部の列がなくなっていることがわかります。

(3)引き続きqquickwidgetを使用してmapboxglのマップをロードします。

import QtQuick 2.0 import QtPositioning 5.5 import QtLocation 5.9 Rectangle { id: mapWindow //anchors.fill: parent//After adding this item to the map, the map will not be displayed, so comment out Map { id: map anchors.fill: parent plugin: Plugin { name: 'mapboxgl' } center: QtPositioning.coordinate(60.170448, 24.942046) // Helsinki zoomLevel: 11 MapParameter { type: 'source' property var name: 'routeSource' property var sourceType: 'geojson' property var data: '{ 'type': 'FeatureCollection', 'features':[{ 'type': 'Feature', 'properties': {}, 'geometry': {'type': 'LineString', 'coordinates': [[ 24.934938848018646, 60.16830257086771 ], [ 24.943315386772156, 60.16227776476442 ]]}}]}' } MapParameter { type: 'layer' property var name: 'route' property var layerType: 'line' property var source: 'routeSource' property var before: 'road-label-small' } MapParameter { type: 'paint' property var layer: 'route' property var lineColor: 'blue' property var lineWidth: 8.0 } MapParameter { type: 'layout' property var layer: 'route' property var lineJoin: 'round' property var lineCap: 'round' } } }

プログラムを入手する:


注:qmlのRectangleの後に追加することはできません他の場合、マップは表示されません。anchors.fill:親。

QQuickViewを引き続き使用する場合は、以下に示すように、上部と下部のステータスバーがカバーされます。インターネットによると、QQuickViewはすべてのqmlが使用されている場合にのみ使用されます。これが当てはまるかどうかはわかりません。

提案:理由がわかっている場合、QQuickViewを引き続き使用する場合は、メッセージを残すことができます。レイアウトを使用できます。レイアウトフォーム:

QVBoxLayout *layout = new QVBoxLayout(this) layout->addWidget(labelBar) layout->addWidget(mainMapBoxWidget) layout->addWidget(buttonBar) layout->setMargin(0) layout->setSpacing(0)もちろん、QQuickWidgetを使用するとレイアウトレイアウトも使用できます。

前の表示と同様に、違いは、マップが元々ウィンドウ全体をカバーしていたことです。ステータスバーが透明の場合、マップはステータスバーの下にも表示されますが、レイアウトレイアウトを使用する場合、マップはウィンドウの中央部分のみを占め、ステータスバーは下のマップを表示しません。