QVerticalLayout 内の QHorizontalLayout 内に 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;
}
プログラムのスクリーンショット。
2 つの小さな長方形は、シーンの左上と右下で、QGraphicsView の位置とサイズに設定されています。QGraphicsView よりも小さいシーンが中央に配置されるため、シーンは中央に表示されます。これは、アプリケーションが QGraphicsView の実際のサイズを何らかの形で認識していることを意味します。これらの長方形の間の領域は 100 x 30 ピクセルで、これがデフォルト値のようです。