1

我有一个在 QWidget 中显示 QML 地图的应用程序。Qwidget 构成了带有拆分器的水平布局的一部分,以允许地图占据大部分空间。我的 UI 结构如下图所示。

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

如果现在在代码中,我为地图创建我的窗口容器,地图不会扩展到 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;

第二张图片是我最终得到的。你可以看到右上角的小地图。我希望它填充所有空间并在调整应用程序大小时扩展/缩小。

指向正确方向的指针将不胜感激。

在此处输入图像描述

在此处输入图像描述

4

1 回答 1

3

使用以下说明:

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

您只是创建一个以和 作为父qvMapContainer级的内容调用的小部件,一个小部件是另一个小部件的子级,仅确定该小部件的位置相对于父级,因此地图建立在左上角,并且每个小部件的初始位置是 (0, 0)。qvMapui->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);
QVBoxLayout *lay = new QVBoxLayout(ui->wdgtMap);
lay->addWidget(qvMapContainer);
于 2018-04-07T08:26:28.000 回答