Размер содержимого QQuickView не изменяется должным образом

Я пытаюсь встроить QMLview в QWidget. Мне удалось отобразить представление внутри главного окна без каких-либо проблем, но всякий раз, когда я изменяю его размер, представление qml не обновляется.

Вид не изменяет размер должным образом

Вот код, который рисует это представление

главное окно.cpp

MainWindow::MainWindow(QWidget *parent) :
  QMainWindow(parent),
  ui(new Ui::MainWindow)
{
  ui->setupUi(this);

  QQuickView * view = new QQuickView ();
  view->setSource (QUrl ("qrc:///main//qml-map") );
  view->setResizeMode (QQuickView::SizeRootObjectToView);

  QWidget * container = QWidget::createWindowContainer(view, this);

  setCentralWidget(container);
}

main.qml

Item {
  anchors.fill: parent
  visible: true

  Plugin {
    id: osmPlugin
    name: "osm"
  }

  Map {
    visible: true
    anchors.fill: parent
    plugin: osmPlugin
    center: QtPositioning.coordinate(59.91, 10.75) // Oslo
    zoomLevel: 10
  }
}

Я также пытался поместить контейнер с помощью функции setLayout, но это не сработало.


person kabinja    schedule 10.03.2017    source источник
comment
Вы пробовали без части view->setResizeMode (QQuickView::SizeRootObjectToView);?   -  person dtech    schedule 11.03.2017
comment
Да, я тоже пробовал менять флаг, но разницы не заметил.   -  person kabinja    schedule 11.03.2017


Ответы (1)


я столкнулся с той же проблемой. Единственный способ исправить это — обработать resizeEvent хост-виджета и сбросить свойства width и height корневого компонента qml в соответствии с новым размером. Попробуй это:

void MainWindow::resizeEvent(QResizeEvent* event)
{
  QQuickItem* rootObject =  view->rootObject(); 
  QSize newSize = event->size();
  if(rootObject) rootObject->setProperty("width",QVariant::fromValue(newSize.width()));
  if(rootObject) rootObject->setProperty("height",QVariant::fromValue(newSize.height()));
}
person Алексей Беляков    schedule 25.05.2017
comment
Я бы также рекомендовал добавить QMainWindow::resizeEvent(event); в конце, чтобы убедиться, что событие изменения размера правильно распространяется по строке. Мне кажется странным, что QQuickWidget и т. д. не делают этого должным образом из коробки. Я довольно смущен тем, что должен делать setResizeMode(...), так как два возможных значения там, кажется, не делают того, для чего они описаны. Или, может быть, документация просто сбивает с толку, и мы все здесь упускаем суть. - person rbaleksandar; 14.06.2020