Qt:带有 Qwidget window 容器的布局

Qt: layouts with a Qwidget window container

我有一个在 QWidget 中显示 QML 地图的应用程序。 Qwidget 构成带有分隔符的水平布局的一部分,以便让地图占据大部分 space。我的 UI 结构如下图所示。

wdgtMap 是用作 window 容器的那个。如果我在其中放置文本编辑(在设计器中),文本编辑会按预期填充小部件,并随着应用程序的大小调整和最大化而扩展。

如果现在在代码中,我为地图创建 window 容器,地图不会扩展到 wdgtMap 的大小。我尝试了很多不同的选择都无济于事。

qmlMapObject = qvMap->rootObject();
// Set the context and include properties.
QQmlContext *ctxt = qvMap->rootContext();
ctxt->setContextProperty("asset_class", &clAsset);
// Set the source after defining the context.
qvMap->setSource(QUrl("qrc:/main.qml"));
// Set widget properties.
QWidget *qvMapContainer = QWidget::createWindowContainer(qvMap, ui->wdgtMap);
qvMapContainer->setMinimumSize(20,20);
qvMapContainer->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::MinimumExpanding);

在私有部分下的头文件中:

QQuickView *qvMap = new QQuickView();
QObject *qmlMapObject;

第二张图是我的结果with.You可以看到右上角的小地图。我希望它在调整应用程序大小时填充所有 space 和 expand/shrink。

将不胜感激指出正确方向。

使用以下指令:

QWidget *qvMapContainer = QWidget::createWindowContainer(qvMap, ui->wdgtMap);

您只是创建了一个名为 qvMapContainer 的小部件,其中包含 qvMap 的内容,并且作为父部件 ui->wdgtMap,一个小部件是另一个小部件的子部件仅确定了这个widget是相对于parent的,所以map建立在左上角,每个widget的初始位置都是(0, 0)。

如果想让一个widget占据父级的大小,就必须通过layout来实现。

qmlMapObject = qvMap->rootObject();
// Set the context and include properties.
QQmlContext *ctxt = qvMap->rootContext();
ctxt->setContextProperty("asset_class", &clAsset);
// Set the source after defining the context.
qvMap->setSource(QUrl("qrc:/main.qml"));
// Set widget properties.
QWidget *qvMapContainer = QWidget::createWindowContainer(qvMap);
QVBoxLayout *lay = new QVBoxLayout(ui->wdgtMap);
lay->addWidget(qvMapContainer);