У меня есть приложение, которое отображает карту QML внутри QWidget. Qwidget является частью горизонтальной компоновки с разделителем, чтобы карта занимала большую часть пространства. Моя структура пользовательского интерфейса похожа на изображение ниже.
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;
Второе изображение — то, чем я заканчиваю. Вы можете видеть маленькую карту в правом верхнем блоке. Я хочу, чтобы он занимал все это пространство и расширялся / уменьшался по мере изменения размера приложения.
Указатели в правильном направлении будут высоко оценены.
Со следующей инструкцией:
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);
Других решений пока нет …