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.…

qt中设置控件不能使用

情景描述 在初始化时&#xff0c;使其action置灰&#xff0c;不能操作&#xff0c;随后将action设置为可以操作。 方法 直接上代码&#xff0c;通过下面的代码可以实现将action设置为置灰状态。 ui->openAction->setDisabled(true);//动作被禁用 //或者可以这样实现 …

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…

求qt如何解决小数计算过程中的精度丢失

问题描述 在下面的例子中&#xff0c;变量a减去一个常量&#xff0c;本该值为0.90&#xff0c;但是通过程序得到a的值0.8999999999&#xff0c;例子如下&#xff1a; qreal a 0.95; a a - 0.05;不光是做减法的时候会出现这样的问题&#xff0c;还有做乘法的时候也会出现这样…

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

戳蓝字“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代码版…

qt在加入Q_OBJECT宏之后出现编译错误

提要 之前的项目编译运行都没有问题&#xff0c;在 加入Q_OBJECT宏之后整个项目编译的时候就出现了问题&#xff0c;会提示无法解析的外部命令xxxxxx。 解决方法 在.pro文件中&#xff0c;随便改动一丁点&#xff0c;当然不能变动你写的正确的代码&#xff0c;这里的随便改动…

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

戳蓝字“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. 配置远程…

qt添加资源文件后编译失败,提示Qt:Error:No rule to make target ’ … /…/??.png’,needed by ‘debug/qrc_qrc.cpp’ stop

提要 项目本来编译没有问题&#xff0c;资源文件忘记添加了&#xff0c;于是添加资源文件后&#xff0c;编译没有通过&#xff0c;提示错误&#xff1a;Qt&#xff1a;Error:No rule to make target ’ … /…/??.png’,needed by ‘debug/qrc_qrc.cpp’ stop. 解决方法 查…

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 -…

qt窗口左上角坐标变动函数使用中的误区

提要 窗口大小不变&#xff0c;窗口的左上角坐标中的x或者y变动。 误区 函数setX,setY与函数moveLeft,moveTop。其中setX,setY在设置左上角坐标的时候会将窗口的大小变化&#xff0c;相当于窗口进行了拉伸或者缩放&#xff0c;而moveLeft,moveTop设置左上角坐标中的x与y时&a…

亚马逊退出中国?

戳蓝字“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…

qt浮动窗口

提要 鼠标进入窗口后&#xff0c;窗口放大&#xff0c;且出现标题栏&#xff0c;鼠标移开&#xff0c;窗口标题栏隐藏&#xff0c;窗口还原。对于放大后超出显示区域的窗口&#xff0c;将窗口进行移动&#xff0c;使其在显示区域内。对于可以看清的窗口&#xff0c;只浮动显示…