gpt4 book ai didi

c++ - 如何在动态小部件中获取 QGraphicsView 的正确位置、宽度和高度

转载 作者:太空宇宙 更新时间:2023-11-04 11:25:08 25 4
gpt4 key购买 nike

我在 QVerticalLayout 内的 QHorizo​​ntalLayout 内有一个 QGraphicsView 元素,因此如果调整屏幕大小,graphicsview 元素也会随之调整大小。在 Qt Creator 中,您添加到此构造中的任何元素都不会附加任何几何数据。在 Qt Creator 中它是灰色的,并动态更新。

当我尝试通过 C++ 获取此 graphicsView 元素的大小时,它会返回默认值 (0,0 100x30),而不是屏幕上显示的实际宽度和高度。如何从此 QGraphicsView 元素获取正确的位置、宽度和高度?

重现此问题的最小程序

具有以下更改的默认 qt 小部件:

主窗口.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralWidget">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QGraphicsView" name="graphicsView"/>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>

主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QDebug>
#include <QGraphicsScene>

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

//Expected output: 1 1 380 280
//Actual output: 0 0 100 30
qDebug() << ui->graphicsView->x() << ui->graphicsView->y()
<< ui->graphicsView->width() << ui->graphicsView->height();

//Expected output: QRectF(1,1 380x280)
//Actual output: QRectF(0,0 100x30)
qDebug() << ui->graphicsView->rect();

//We need a scene to draw things
QGraphicsScene *scene = new QGraphicsScene( parent );
ui->graphicsView->setScene(scene);

scene->setSceneRect(ui->graphicsView->x(), ui->graphicsView->y(),
ui->graphicsView->width(), ui->graphicsView->height());

//Box in the top left and bottom right so we have a visual clue
scene->addRect(0,0,2,2,QPen(),QBrush());
scene->addRect(scene->width(),scene->height(),2,2,QPen(),QBrush());

}

MainWindow::~MainWindow()
{
delete ui;
}

程序截图。

两个小矩形是场景的左上角和右下角,设置为 QGraphicsView 的位置和大小。场景显示在中间,因为比它们所在的 QGraphicsView 小的场景居中,这意味着应用程序以某种方式知道 QGraphicsView 的实际大小。这些矩形之间的区域是 100 x 30 像素,这似乎是默认值。

Screenshot showing the window while running this program

最佳答案

如果 QWidget 被隐藏,它在显示之前不会接收到 QResizeEvent,参见 https://qt-project.org/doc/qt-5/qwidget.html#size-prop .因此,当您尝试在构造函数中获取位置或大小时,您将获得默认值。

您可以在 MainWindow 的 void resizeEvent(QResizeEvent *) 中监视 graphicsView 的几何形状。

关于c++ - 如何在动态小部件中获取 QGraphicsView 的正确位置、宽度和高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26920575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com