目录

原理

关键代码


原理

在QDialog和QWidget中一般使用重写:

    void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;

这3个函数就可以自定义窗口的放大的和缩小!

这里不要忘记设置

setMouseTracking(true);

这个属性!

在QMainWindow中,可以利用状态栏的特点,进行放大和缩小!

原理是,状态栏存在这样的一个东西,可以对窗口进行设置:

下面那个小三角形,即可完成窗体放缩!

这里可以重写

void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;

让其更加的明显!

截图如下:

程序运行截图如下:

关键代码

关键源码如下:

变量:

    bool m_isDragging;QPoint m_startPosition;QPoint m_framePosition;

参数初始化:

m_isDragging = false;

cpp文件:

void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);painter.setBrush(QBrush(Qt::white));painter.setPen(Qt::black);QRect rect = this->rect();rect.setWidth(rect.width() - 1);rect.setHeight(rect.height() - 1);painter.drawRoundedRect(rect, 30, 30);painter.setPen(Qt::red);painter.drawPixmap(rect.width() - LABLESIZE16, rect.height() - LABLESIZE16, QPixmap(":/img/dot_blue.png").scaled(LABLESIZE16, LABLESIZE16));QMainWindow::paintEvent(event);
}void MainWindow::mouseMoveEvent(QMouseEvent *event)
{if(event->buttons() & Qt::LeftButton){if(m_isDragging){QPoint delta = event->globalPos() - m_startPosition;move(m_framePosition + delta);}}QMainWindow::mouseMoveEvent(event);
}void MainWindow::mousePressEvent(QMouseEvent *event)
{if(event->button() == Qt::LeftButton){m_isDragging = true;m_startPosition = event->globalPos();m_framePosition = frameGeometry().topLeft();}QMainWindow::mousePressEvent(event);
}void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{m_isDragging = false;QMainWindow::mouseReleaseEvent(event);
}

Qt工作笔记-QMainWindow自定义窗体中利用状态栏进行窗体放缩相关推荐

  1. Qt工作笔记-QGraphics框架场景中图元的移除与析构

    1.场景里面使用removeItem函数,这个函数官方给出如下解释 注意这个词remove只是移除,并不是delete掉,所以只是场景中(显示出来的图元)没有了,空间还是存在. 举个代码例子: voi ...

  2. Qt工作笔记-右键删除视图中的Item【坐标映射】

    程序运行截图如下: 关键: 当处理场景中的图形项时,将坐标或者一个任意的形状从场景映射到图形项.或者从一个图形项映射到另一个图形项.或者从视图映射到场景,这些坐标变换都是很常用的.例如,在QGraph ...

  3. Qt工作笔记-关于各种QGraphics中item的坐标分析(如QGraphicsLineItem)【天坑】

    程序运行截图如下: 只是随便看看,大家不要当一回事, 下面是源码: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> ...

  4. Qt工作笔记-QML自定义圆形进度条(C++后端处理数据)

    目录 原理 源码 原理 1.使用QML中的Canvas绘制圆形,用一种颜色,说明是未读取,再用另外一种颜色覆盖到原来的颜色!说明进度! 2.使用setContextProperty把C++中的某个继承 ...

  5. Qt工作笔记-图形视图框架中的分组,以及添加平行拖动图元

    啥意思,感觉本人语文学得菜,不好描述. 直接看程序运行截图: 1.隐藏鼠标: 2.图元分组: 3.视图与场景坐标转换 程序源码如下: mygraphicsitem.h #ifndef MYGRAPHI ...

  6. Qt工作笔记-正则表达式QProcess::startDetached中正则表达式的使用

    首先来看下这个函数: 第一个是程序,第二个是参数. 第二个参数需要QStringList 这里可以通过QRegExp("\\s+")进行操作. 他会把空格,制表符进行分割,spli ...

  7. Qt工作笔记-发送端发送Json格式的数据包,接收端解析数据包

    原理以及运行 原理是因为QJsonDocument提供了一个函数toJson 可以直接把Json数据转成QByteArray,这样就可以直接发送数据包,然后再按照常规方法解析即可,本源码中含解析内容, ...

  8. 在一个窗体中调用另一个窗体的控件或方法(C#)

    在一个窗体中调用另一个窗体的控件或方法 解决方案:从构造函数中传递参数(Form). 1.将Form1中的控件改成public属性 具体实现过程请参看一下代码(在form1的textbox1中输入然后 ...

  9. Qt工作笔记-使用toVariant().toMap()分割Json文件(666解析法)

    目录 概念 演示过程及源码 概念 今天看到大佬去解析Json文件的代码,简直666,特意记录此笔记,方便以后用得到,肯定会用得到. 演示过程及源码 如下面的这个Json代码,这个是调用face++的h ...

最新文章

  1. FPGA中LVDS差分高速传输的实现
  2. 【FFmpeg】如何通过字符串到对应的封装器,以flv为例
  3. 偶然发现静态函数与性能一例
  4. 09、HTLM中直接写get请求和模板标签分片功能
  5. heidiSQL使用简介
  6. php返回null接收的是空字符串,求大神救命!!php接收到是空的字符串
  7. 基于matlab的捷联惯导算法设计及仿真,基于 Matlab 的捷联惯导算法设计及仿真1doc.doc...
  8. linux系统下如何优化mysql运行环境
  9. u盘中毒文件为html文档,U盘中毒后文件夹被隐藏的恢复方法
  10. Web前端:木兰花令网页案例设计
  11. 海豚调度(DolphinSchedulerDolphinScheduler)2.0的下载及安装(单机版)
  12. 安装 win7虚拟机
  13. Numpy:随机抽样
  14. 用HTML5+CSS3实现qq会员页面的仿制
  15. Ubuntu / Windows 查看域名系统 (Domain Name System,DNS)
  16. 网站网页中加入各种分享按钮功能 百度分享
  17. CSS/HTML 网页添加网易云歌曲插件
  18. 可兼容所有浏览器的“收藏本站”、“设为首页”js代码
  19. spaCy的方法进行训练一个新的招投标实体标注模型
  20. C++实现双人中国象棋(一)——算法篇(附完整代码)

热门文章

  1. 从谷歌公司发现的十个至理名言
  2. 有类和无类路由下的路由匹配原则
  3. 优化了破网站的搜索功能
  4. Excel和PPT已经落后了,可视化大屏强在哪?一次看过瘾
  5. 14年数字化转型经验,总结出数据团队的5个级别,最后1个没人做到
  6. 程序员日记我们需要有条理的生活
  7. 为MFC应用程序添加全屏幕显示功能
  8. 云计算开发学习笔记:Python3迭代器与生成器
  9. 大数据算法岗位面试题
  10. python-opencv图像处理之哈里斯角检测