QGraphicsView加入到布局,所在的窗口变大,视图和场景都变大,使场景中的矩形也变大

需求

窗口变化时,窗口中的矩形框也变化。

效果展示

在这里插入图片描述

当窗口变大时其矩形框也变大
在这里插入图片描述
要求绿色矩形框与蓝色背景的边距始终为10。

代码

直接上项目的代码。

项目结构

在这里插入图片描述

各文件的代码

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();//初始化场景void resizeEvent(QResizeEvent *event);//窗口大小发生变化的时候,该函数触发
public slots:private:Ui::Dialog *ui;QGraphicsScene      *m_scene;QGraphicsRectItem   *m_item;
};
#endif // DIALOG_H

dialog.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());//设置场景的颜色m_scene->setBackgroundBrush(Qt::darkBlue);//    QPalette palete = m_scene->palette();//为什么画板的这种方式不对呢
//    palete.setBrush(QPalette::Background,Qt::blue);
//    palete.setColor(QPalette::Background,Qt::blue);
//    m_scene->setPalette(palete);ui->graphicsView->setScene(m_scene);qDebug()<<"场景的矩形:"<<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);//设置整个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());//如果不重新设置场景的大小,qDebug()<<"场景的矩形:"<<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
其文件的类对象如下:
在这里插入图片描述
以上是整个程序。但是当窗口最大化后,场景和视图都变大,若是不重新设置场景的场景矩形,则绿色矩形框的大小和位置保持不变,即将代码改为如下,注释掉其中设置场景大小的代码。

void Dialog::resizeEvent(QResizeEvent *event)
{qDebug()<<"窗口大小"<<size();
//    m_scene->setSceneRect(0,0,size().width(),size().height());//如果不重新设置场景的大小,qDebug()<<"场景的矩形:"<<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);
}

这样修改后,表面上可以讲通,窗口变化获取场景矩形,然后重新设置绿色矩形框的位置大小。但实际绿色矩形框的大小并未变化,究其原因是获取的场景矩形的大小没有变化。需重新设置场景矩形后,绿色矩形框的大小才可以随窗口变化而变化。求解答。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/524083.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenGL 单色

目录 一.OpenGL 单色图 1.IOS Object-C 版本1.Windows OpenGL ES 版本2.Windows OpenGL 版本 二.OpenGL 单色 GLSL Shader三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >…

微服务落地,我们在考虑什么?| 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;李宁转自&#xff1a; 博云技术社区导读微服务已经成为过去几年软件架…

CentOS 7 安装版本管理 GitLab

一、找到Gitlab -ce的安装页面(默认ee收费) gitlab官网&#xff1a;https://about.gitlab.com/install 也可以直接跳转gitlab安装ce页面:(推荐使用) https://about.gitlab.com/install/#centos-7?versionce 二、Gitlab-ce安装流程 1. 安装并配置gitlab必要的依赖项2.…

5G精华问答 | 5G是否会“逼退”4G?

5G的概念虽然很早就已经提出&#xff0c;但是对于大多数用户来说&#xff0c;真正听到并且对5G有了初步的了解还是在今年。今天就让我们来看看关于5G的精华问答吧。1Q&#xff1a;5G标准是怎么来的&#xff0c;由谁制定的呢A&#xff1a;5G是由“第三代合作伙伴计划组织”(3rd …

自建gitlab服务器以及出现502错误解决方案

自建gitlab服务器502错误解决方案 安装gitlab [rootianly]# curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash [rootianly]# yum install -y gitlab-ce 配置 [rootianly]# vim /etc/gitlab/gitlab.rb 修改两个冲突端口号 …

Windows OpenGL ES 图像透明度

目录 一.OpenGL ES 图像透明度 1.原始图片2.效果演示 二.OpenGL ES 图像透明度源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 Open…

山城虽寒、但物联却热,探访中移物联小记一笔……

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;这是小编第二次来到山城重庆&#xff0c;尽管春寒料峭但却收获颇丰&#xff0c;要问缘…

Redis的启动、使用和停止

1、Redis的启动 &#xff08;1&#xff09;前端模式启动 ①直接运行bin/redis-server将以前端模式启动&#xff1a;切换到 /usr/local/redis/bin目录下&#xff0c;然后./redis-server &#xff1b; ②前端模式的缺点是启动完成后&#xff0c;不能再进行其他操作&#xff1b…

企业实战(Jenkins+GitLab+SonarQube)_08_jenkins安装和第一个Java项目构建

接上一篇&#xff1a;企业实战07_Jenkins 安全设置https://blog.csdn.net/weixin_40816738/article/details/90383721 文章目录1. 集成maven插件&#xff1a;2. 通过SSH发送构建工件3. 系统管理员邮件地址4. 基础配置4.1. 配置jdk4.2. 配置Git4.3. 配置Maven5. 集成gitlab代码版…

滴滴全链路压测解决之道 | 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;张晓庆转自&#xff1a;Java架构沉思录滴滴出行创立于 2012 年&#…

企业实战(Jenkins+GitLab+SonarQube)_09_jenkins发布项目到测试环境

接上一篇&#xff1a;企业实战08_jenkins安装和第一个Java项目构建https://blog.csdn.net/weixin_40816738/article/details/90454587 文章目录1. 配置远程测试服务器主机2. 在视图中选择项目&#xff08;testToGitLab&#xff09;3. 选择【配置】4. 配置和发布脚本1. 配置远程…

Linux 安装、卸载JDK

Linux 安装卸载JDK 第一种方式(手动上传)&#xff1a; 1、查看已安装的jdk2、卸载jdk3、再次检查jdk是否已卸载4、上传jdk、解压jdk5、配置环境变量6、重新加载全局环境配置7、查看jdk版本 一、卸载系统已有的JDK 1、查看已安装的jdk rpm -qa|grep jdk2、卸载jdk rpm -e -…

亚马逊退出中国?

戳蓝字“CSDN云计算”关注我们哦&#xff01;整理 | 伍杏玲责编 | 唐小引封图 | CSDN 付费下载自东方IC出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;北京时间4月17日&#xff0c;据”媒体训练营“报道&#xff1a;亚马逊将在本周宣布退出中国&#xff0c;确切时…

Centos/Red Hat6.8 安装、配置、启动Gitlab (外网环境)

一、登录gitlab官网 官网&#xff1a;https://about.gitlab.com/install/ 二、操作步骤 1. 安装并配置gitlab必要的依赖项2. 添加GitLab软件包存储库3. 将加GitLab软件仓库更新改为清华大学开源软件镜像站4. 安装Gitlab软件5. 设置external_url(web访问地址)6. 重新加载Gi…

边缘计算精华问答 | 5G是否会“逼退”4G?

新的数据需求也催生了新的技术和商业模式&#xff0c;这便是最近一两年来边缘计算所产生的大背景&#xff0c;大火的边缘计算的核心技术是什么&#xff0c;面临着哪些挑战&#xff1f;今天就让我们来看看关于边缘计算的精华问答吧。1Q&#xff1a;边缘计算参考架构什么样&#…

企业实战(Jenkins+GitLab+SonarQube)_12_Jenkins+soanr服务器搭建和代码检查

文章目录一、前期准备1.1. jenkins 服务器搭建完成1.2. sonarqube服务器搭建完成二、Jenkins 配置2.1. 安装 Sonar 插件2.2. 配置 SonarQube servers2.3. 配置 SonarQube Scanner三、新建任务和配置3.1. 添加描述3.2. 设置最大构建数量&#xff0c;防止内存溢出3.3. 添加项目远…

阿里云智能技术战略架构师陈绪:透视2019云计算酣战

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a; 陈绪博士&#xff0c;阿里云智能技术战略架构师。转自&#xff1a;云…

Neither the JAVA_HOME nor the JRE_HOME environment variable is defined 完美解决(tomcat error)

error&#xff1a; Linux下启动和关闭tomcat报错&#xff0c;如下图所示&#xff1a; Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable is needed to run this program Neither the JAVA_HOME nor the …

Observers:让 ZooKeeper更具可伸缩性 | 时光机

戳蓝字“CSDN云计算”关注我们哦&#xff01;时光机&#xff1a;搭载这部时光机&#xff0c;带您回顾《程序员》大量优秀文章&#xff0c;重温经典技术干货&#xff0c;我们发现硬核技术永不过时&#xff0c;对于get要点、solve难题、提高自我&#xff0c;仍有非凡意义。作者&a…

企业实战(Jenkins+GitLab+SonarQube)_10_Jenkins通过Depoly插件热部署Java程序

文章目录一、 编辑配置文件1.1. 进入tomcat的conf目录1.2. 编辑tomcat-users.xml文件1.3. 添加配置信息二、 配置说明三、 启动tomcat服务3.1. 启动tomcat3.2. 浏览器访问3.3. 点击Manager App访问4033.4. 编辑配置文件3.5. 注释value部分3.6. 浏览器再次请求四、新建任务&…