QQuickView内容未正确调整大小

时间:2017-03-10 21:59:40

标签: c++ qt qquickview

我正在尝试在QWidget中嵌入QMLview。我设法在主窗口内显示视图没有任何问题,但每当我调整大小时,qml视图都不会更新。

查看未正确调整大小

以下是绘制该视图的代码

mainwindow.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函数放置容器,但它没有做到这一点。

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。我发现修复它的唯一方法是处理主机窗口小部件的resizeEvent,并根据新的大小重置根qml组件的widthheight属性。试试这个:

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()));
}