Qt工作笔记-QMainWindow自定义窗体中利用状态栏进行窗体放缩
目录
原理
关键代码
原理
在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自定义窗体中利用状态栏进行窗体放缩相关推荐
- Qt工作笔记-QGraphics框架场景中图元的移除与析构
1.场景里面使用removeItem函数,这个函数官方给出如下解释 注意这个词remove只是移除,并不是delete掉,所以只是场景中(显示出来的图元)没有了,空间还是存在. 举个代码例子: voi ...
- Qt工作笔记-右键删除视图中的Item【坐标映射】
程序运行截图如下: 关键: 当处理场景中的图形项时,将坐标或者一个任意的形状从场景映射到图形项.或者从一个图形项映射到另一个图形项.或者从视图映射到场景,这些坐标变换都是很常用的.例如,在QGraph ...
- Qt工作笔记-关于各种QGraphics中item的坐标分析(如QGraphicsLineItem)【天坑】
程序运行截图如下: 只是随便看看,大家不要当一回事, 下面是源码: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> ...
- Qt工作笔记-QML自定义圆形进度条(C++后端处理数据)
目录 原理 源码 原理 1.使用QML中的Canvas绘制圆形,用一种颜色,说明是未读取,再用另外一种颜色覆盖到原来的颜色!说明进度! 2.使用setContextProperty把C++中的某个继承 ...
- Qt工作笔记-图形视图框架中的分组,以及添加平行拖动图元
啥意思,感觉本人语文学得菜,不好描述. 直接看程序运行截图: 1.隐藏鼠标: 2.图元分组: 3.视图与场景坐标转换 程序源码如下: mygraphicsitem.h #ifndef MYGRAPHI ...
- Qt工作笔记-正则表达式QProcess::startDetached中正则表达式的使用
首先来看下这个函数: 第一个是程序,第二个是参数. 第二个参数需要QStringList 这里可以通过QRegExp("\\s+")进行操作. 他会把空格,制表符进行分割,spli ...
- Qt工作笔记-发送端发送Json格式的数据包,接收端解析数据包
原理以及运行 原理是因为QJsonDocument提供了一个函数toJson 可以直接把Json数据转成QByteArray,这样就可以直接发送数据包,然后再按照常规方法解析即可,本源码中含解析内容, ...
- 在一个窗体中调用另一个窗体的控件或方法(C#)
在一个窗体中调用另一个窗体的控件或方法 解决方案:从构造函数中传递参数(Form). 1.将Form1中的控件改成public属性 具体实现过程请参看一下代码(在form1的textbox1中输入然后 ...
- Qt工作笔记-使用toVariant().toMap()分割Json文件(666解析法)
目录 概念 演示过程及源码 概念 今天看到大佬去解析Json文件的代码,简直666,特意记录此笔记,方便以后用得到,肯定会用得到. 演示过程及源码 如下面的这个Json代码,这个是调用face++的h ...
最新文章
- FPGA中LVDS差分高速传输的实现
- 【FFmpeg】如何通过字符串到对应的封装器,以flv为例
- 偶然发现静态函数与性能一例
- 09、HTLM中直接写get请求和模板标签分片功能
- heidiSQL使用简介
- php返回null接收的是空字符串,求大神救命!!php接收到是空的字符串
- 基于matlab的捷联惯导算法设计及仿真,基于 Matlab 的捷联惯导算法设计及仿真1doc.doc...
- linux系统下如何优化mysql运行环境
- u盘中毒文件为html文档,U盘中毒后文件夹被隐藏的恢复方法
- Web前端:木兰花令网页案例设计
- 海豚调度(DolphinSchedulerDolphinScheduler)2.0的下载及安装(单机版)
- 安装 win7虚拟机
- Numpy:随机抽样
- 用HTML5+CSS3实现qq会员页面的仿制
- Ubuntu / Windows 查看域名系统 (Domain Name System,DNS)
- 网站网页中加入各种分享按钮功能 百度分享
- CSS/HTML 网页添加网易云歌曲插件
- 可兼容所有浏览器的“收藏本站”、“设为首页”js代码
- spaCy的方法进行训练一个新的招投标实体标注模型
- C++实现双人中国象棋(一)——算法篇(附完整代码)