QGraphicsView加入到布局,所在的窗口变大,视图和场景都变大,使场景中的矩形也变大
生活随笔
收集整理的這篇文章主要介紹了
QGraphicsView加入到布局,所在的窗口变大,视图和场景都变大,使场景中的矩形也变大
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
需求
窗口變化時(shí),窗口中的矩形框也變化。
效果展示
當(dāng)窗口變大時(shí)其矩形框也變大
要求綠色矩形框與藍(lán)色背景的邊距始終為10。
代碼
直接上項(xiàng)目的代碼。
項(xiàng)目結(jié)構(gòu)
各文件的代碼
main.cpp
#include "dialog.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Dialog w;w.show();return a.exec(); }dialog.h
#ifndef DIALOG_H #define DIALOG_H#include <QDialog> #include <QGraphicsScene> #include <QGraphicsRectItem>QT_BEGIN_NAMESPACE namespace Ui { class Dialog; } QT_END_NAMESPACEclass Dialog : public QDialog {Q_OBJECTpublic:Dialog(QWidget *parent = nullptr);~Dialog();protected:void initScene();//初始化場(chǎng)景void resizeEvent(QResizeEvent *event);//窗口大小發(fā)生變化的時(shí)候,該函數(shù)觸發(fā) public slots:private:Ui::Dialog *ui;QGraphicsScene *m_scene;QGraphicsRectItem *m_item; }; #endif // DIALOG_Hdialog.cpp
#include "dialog.h" #include "ui_dialog.h" #include <QDebug>Dialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog) {ui->setupUi(this);setWindowFlags(Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint);//添加最大最小化按鈕initScene(); }Dialog::~Dialog() {delete ui; }void Dialog::initScene() {m_scene = new QGraphicsScene(this);QRect sizeView = ui->graphicsView->geometry();qDebug()<<"視圖大小:"<<sizeView;qDebug()<<"窗口大小"<<size();m_scene->setSceneRect(0,0,size().width(),size().height());//設(shè)置場(chǎng)景的顏色m_scene->setBackgroundBrush(Qt::darkBlue);// QPalette palete = m_scene->palette();//為什么畫(huà)板的這種方式不對(duì)呢 // palete.setBrush(QPalette::Background,Qt::blue); // palete.setColor(QPalette::Background,Qt::blue); // m_scene->setPalette(palete);ui->graphicsView->setScene(m_scene);qDebug()<<"場(chǎng)景的矩形:"<<m_scene->sceneRect();QRectF rect(m_scene->sceneRect().x() + 10,m_scene->sceneRect().y() + 10,m_scene->sceneRect().width() - 20,m_scene->sceneRect().height() - 20);m_item = new QGraphicsRectItem(rect); // m_item->setBrush(Qt::green);//設(shè)置整個(gè)item背景為綠色QPen pen(Qt::DashDotLine);pen.setWidth(3);pen.setColor(Qt::green);m_item->setPen(pen);m_scene->addItem(m_item); }void Dialog::resizeEvent(QResizeEvent *event) {qDebug()<<"窗口大小"<<size();m_scene->setSceneRect(0,0,size().width(),size().height());//如果不重新設(shè)置場(chǎng)景的大小,qDebug()<<"場(chǎng)景的矩形:"<<m_scene->sceneRect();QRectF rect(m_scene->sceneRect().x() + 10,m_scene->sceneRect().y() + 10,m_scene->sceneRect().width() - 20,m_scene->sceneRect().height() - 20);m_item->setRect(rect); }dialog.ui
其文件的類(lèi)對(duì)象如下:
以上是整個(gè)程序。但是當(dāng)窗口最大化后,場(chǎng)景和視圖都變大,若是不重新設(shè)置場(chǎng)景的場(chǎng)景矩形,則綠色矩形框的大小和位置保持不變,即將代碼改為如下,注釋掉其中設(shè)置場(chǎng)景大小的代碼。
這樣修改后,表面上可以講通,窗口變化獲取場(chǎng)景矩形,然后重新設(shè)置綠色矩形框的位置大小。但實(shí)際綠色矩形框的大小并未變化,究其原因是獲取的場(chǎng)景矩形的大小沒(méi)有變化。需重新設(shè)置場(chǎng)景矩形后,綠色矩形框的大小才可以隨窗口變化而變化。求解答。
總結(jié)
以上是生活随笔為你收集整理的QGraphicsView加入到布局,所在的窗口变大,视图和场景都变大,使场景中的矩形也变大的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: vue快速复制快捷键_⌨️ Vue项目给
- 下一篇: mac上用qt调用自己生成的qt动态库,