Qt: макеты с контейнером окна Qwidget

У меня есть приложение, которое отображает карту 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;

Второе изображение — то, чем я заканчиваю. Вы можете видеть маленькую карту в правом верхнем блоке. Я хочу, чтобы он занимал все это пространство и расширялся / уменьшался по мере изменения размера приложения.

Указатели в правильном направлении будут высоко оценены.

введите описание изображения здесь

введите описание изображения здесь

1

Решение

Со следующей инструкцией:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]