QQuickView 内容未正确调整大小

Posted

技术标签:

【中文标题】QQuickView 内容未正确调整大小【英文标题】:QQuickView content not resizing properly 【发布时间】:2017-03-10 21:59:40 【问题描述】:

我正在尝试在 QWidget 中嵌入 QMLview。我设法在主窗口中显示视图没有任何问题,但是每当我调整它的大小时,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 函数放置容器,但没有成功。

【问题讨论】:

你试过没有view->setResizeMode (QQuickView::SizeRootObjectToView); 部分吗? 是的,我也试过改flag,但没发现有什么不同。 【参考方案1】:

我遇到了同样的问题。我发现修复它的唯一方法是处理主机小部件的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()));

【讨论】:

我还建议在末尾添加 QMainWindow::resizeEvent(event); 以确保调整大小事件正确地向下传播。我确实觉得奇怪的是 QQuickWidget 等没有开箱即用地正确执行此操作。我很困惑setResizeMode(...) 应该做什么,因为那里的两个可能值似乎没有按照它们的描述做。或者也许文档只是令人困惑,我们都错过了这里的重点。

以上是关于QQuickView 内容未正确调整大小的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewAutomaticDimension 未正确调整 UIIImageView 的大小

SpriteKit SKScene 未正确调整大小以适合 iPhone 12

具有列调整大小插件的数据表未正确调整大小

QTableWidget 列跨度未正确调整大小

调整大小的 opencv 图像在 QWidget C++ 上未正确显示

Swift:集合视图未正确调整以更改大小