[英]How to obtain the correct position, width and height of a QGraphicsView in a dynamic widget
我在QVerticalLayout內的QHorizontalLayout內有一個QGraphicsView元素,因此,如果調整屏幕大小,則GraphicsView元素也會隨之調整大小。 在Qt Creator中,您添加到此構造中的任何元素都不會附加任何幾何數據。 在Qt Creator中,它呈灰色顯示並動態更新。
當我嘗試通過c ++獲取此graphicsView元素的大小時,它將返回默認值(0,0 100x30),而不是屏幕上實際顯示的寬度和高度。 如何從此QGraphicsView元素獲取正確的位置,寬度和高度?
重現此問題的最小程序
默認的qt小部件具有以下更改:
mainwindow.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>
mainwindow.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像素,這似乎是默認值。
如果QWidget是隱藏的,它將在顯示之前不會收到QResizeEvent
,請參閱https://qt-project.org/doc/qt-5/qwidget.html#size-prop 。 因此,當您嘗試獲取構造函數中的位置或大小時,將獲得默認值。
您可以在MainWindow的void resizeEvent(QResizeEvent *)
中監視graphicsView的幾何形狀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.