我有一个在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;
第二张图片是我最终得到的。你可以看到右上方的小地图。我希望它能够填充所有空间并在应用程序调整大小时展开/缩小。
非常感谢指向正确方向的指针。
答案 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);