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