Qt:使用Qwidget窗口容器的布局

时间:2018-04-07 07:47:51

标签: c++ qt qt5 qwidget qquickview

我有一个在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;

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

非常感谢指向正确方向的指针。

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:3)

使用以下说明:

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

您只创建一个名为qvMapContainer的内容为qvMap且作为父ui->wdgtMap的窗口小部件,一个窗口小部件是另一个窗口小部件的子窗口,只建立此窗口小部件的位置相对于父级,因此映射在左上角建立,每个小部件的初始位置为(0,0)。

如果您希望窗口小部件占用父窗口的大小,则必须通过布局执行此操作。

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);