qt实现无边框窗体的拉伸和拖动(附原理)
了解无边框窗体的拖动和拉伸你需要了解以下的原理,看图:
了解了这个就好懂多了,直接看代码,我只实现了在右下角进行拖动,其他的部位原理可以实现
.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QMouseEvent>class MainWindow : public QMainWindow
{Q_OBJECTprotected:void mouseMoveEvent(QMouseEvent * event);void mousePressEvent(QMouseEvent *event);void mouseReleaseEvent(QMouseEvent * event);public:MainWindow(QWidget *parent = nullptr);~MainWindow();private:QPoint pLast;bool m_bPressed;QPoint clickPos;bool m_bresize=false;
};
#endif // MAINWINDOW_H
.cpp
#include "mainwindow.h"
#include <qdebug.h>void MainWindow::mouseMoveEvent(QMouseEvent *event)
{if (event->buttons() && Qt::LeftButton&&m_bPressed){move(event->globalPos() - pLast);event->accept();}if (isMaximized()){return;}int iWidth=this->width();int iHeight=this->height();if(event->pos().x()>iWidth-10&&event->pos().y()>iHeight-10){this->setCursor(Qt::SizeFDiagCursor);int width=this->width()-(this->width()-event->pos().x());int height=this->height()- (this->height()-event->pos().y());if(m_bresize==true){this->resize(width,height);qDebug()<<"ggggggg";}}else{this->setCursor(Qt::ArrowCursor);}}void MainWindow::mousePressEvent(QMouseEvent *event)
{int width=this->width();int height=this->height();if(event->pos().x()>width-10&&event->pos().y()>height-10&&event->buttons() == Qt::LeftButton){clickPos=event->pos();m_bresize=true;qDebug()<<"11111";}else{m_bPressed = true;pLast = event->globalPos() - this->pos();event->accept();qDebug()<<"2222";}}void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{m_bPressed = false;m_bresize=false;
}MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{setWindowFlags(Qt::FramelessWindowHint | windowFlags());this->resize(500,500);this->setMouseTracking(true);
}MainWindow::~MainWindow()
{}
效果图:
ヾ( ̄▽ ̄)ByeBye
qt实现无边框窗体的拉伸和拖动(附原理)相关推荐
- 通过调用API函数实现的无边框窗体的拖拽,比判断坐标更快捷
在winform程序中,有时会选择边框设计会none,但是这样就不能拖拽窗体移动 解决方案有二: 1,判断坐标控制拖拽 2.利用API函数, 下面介绍利用API函数,方便,快捷 #region 移动无 ...
- Qt无边框窗体(Windows)
Qt无边框窗体Windows篇 去掉标题栏和边框 实现拖拽功能 还原窗体功能 注意点 我们可以做的更好 添加阴影 亚克力面板效果 结语 去掉标题栏和边框 首先第一步我们要通过设置系统绘制的边框消失 s ...
- QT无边框窗体改变大小 很顺畅
近期,做项目用到无边框窗体,令人蛋疼的是无边框窗体大小的改变要像右边框那样,上下左右四周,而且要流畅. 网上也找了些代码,发现居然还要连接到windows事件,这显然不合常理,后来自己新建了demo, ...
- 无边框窗体和用户控件以及权限
无边框窗体: 就是吧窗体的边框去掉,然后自己做按钮设置功能. 无边框窗体的移动: 将下面代码直接复制粘贴,将窗体的鼠标按下事件的方法改成下面方法的名字就可以直接使用 1 //窗体移动API 2 [Dl ...
- 再谈无边框窗体的操作
本文介绍操作无边框窗体的其他几个方面的技巧. 设置浮动菜单 通常情况下,在无边框窗体中不能设置菜单.如果在无边框窗体中设置了菜单,运行时窗体上就会出现标题栏.那么,是否在无边框窗体中就不能使用菜单了呢 ...
- 无边框窗体移动的方法
文章目录 1 无边框窗体移动的方法 1.1 无边框窗体移动的方法 1 无边框窗体移动的方法 1.1 无边框窗体移动的方法 当我们把窗体设置为无边框后,会发现用鼠标拖动窗体时是没有反应的,我们需要在窗体 ...
- 01.WPF中制作无边框窗体
[引用:]http://blog.csdn.net/johnsuna/article/details/1893319 众所周知,在WinForm中,如果要制作一个无边框窗体,可以将窗体的FormBor ...
- 【C#】使用DWM实现无边框窗体阴影或全透窗体
1.无边框窗体阴影,win7(需要开启Aero效果)及以上系统 public class LdwmForm : Form{public LdwmForm(){Initialize();}/// < ...
- 拖动无边框窗体(VB6代码)
简单代码片段,记录一下备用. Option Explicit Dim mX As Long, mY As Long Private Sub Form_MouseDown(Button As Integ ...
- C# WinForm 无边框窗体,加阴影、拖动、改变大小等功能完美实现(自认为是完美的 ^=^)
关于Winform的无边框窗体实现,网络上有很多大牛文章,这里不赘述.我也是参考网络上的思路,在使用别人的代码基础上,发现和遇到了很多小问题,所以做了改造,以下做个记录,也是给需要的人提供一点思路,如 ...
最新文章
- CCS V5 创建工程和配置软件仿真
- (0046) iOS开发之View的frame和bounds之解惑
- python 提取字符串中的数字
- 学习:ups电池放电时间是怎么计算的?
- 和硕看重物联网大势 程建中:从擅长领域出发
- flink source 同步_Flink面试题
- java代码内创建mysql索引_点评阿里JAVA手册之MySQL数据库 (建表规约、索引规约、SQL语句、ORM映射)...
- 拓端tecdat|ARIMA模型预测CO2浓度时间序列-python实现
- AE开发之鹰眼窗口、书签
- Mysql-多表查询
- Intel系列CPU架构的发展史
- 计算机应用研究所912,中国科学院计算技术研究所硕士生导师章隆兵
- 随机合并多个视频,同时更换背景音频
- 铂链获美国顶级区块链投资基金 Draper Dragon Digital Fund投资
- mipi摄像头linux,VS-RK3399 在linux系统下面调试Mipi camera接口介绍
- 中国科学院大学计算机分数线低,2018中国科学院大学录取分数线公布,能否冲击清北霸主地位?...
- tkinter学习笔记
- Redis分布式锁背后的原理
- 双弧脉冲 MIG 焊嵌入式控制系统设计及试验分析
- doxygen C++
热门文章
- Luogu1541[NOIp2010 TG] 乌龟棋
- .php on line 0,windows启动apache提示PHP Startup: in Unknown on line 0
- python pdf转txt_Python之pdf转txt
- 深圳php程序培训班,深圳php编程培训班哪几个好
- mysql新建数据库数据类型_数据库Mysql的学习(二)-数据类型和创建
- python选择排序算法_Python - 排序算法
- java excel通用导入类_java excel 文件导入通用接口
- netdevice - 底层访问 Linux 网络设备
- asp.net core 系列之并发冲突
- find ctime 加减n时间范围