赞
踩
C++ Qt是一个基于C++语言的跨平台应用程序开发框架,具有丰富的UI组件和API库。Qt包括了许多模块,如Qt Core、Qt GUI、Qt Network等,每个模块都提供了一系列的类和函数。Qt还提供了集成开发环境(IDE)Qt Creator,使得开发人员可以通过它来创建、编译、调试和部署Qt应用程序。
学习Qt开发不知道做什么?我为大家整理的这些领域都涉及到Qt开发:嵌入式领域、桌面端开发、移动端、微控制器MCU、客户端(游戏、直播等等)、汽车领域行业、 消费类电子设备、医疗领域行业、工业自动化领域等等
Qt窗体若设置了
setWindowFlags (Qt::FramelessWindowHint);
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
运行后该窗体是无法进行移动和调整大小的,那要如何才能让它和普通窗体一样进行移动和调整其大小的呢?方案如下:
- void QFramelessWindow::mousePressEvent(QMouseEvent *event)
- {
- if (event->button() == Qt::LeftButton) {
- this->m_drag = true;
- this->dragPos = event->pos();
- this->resizeDownPos = event->globalPos();
- this->mouseDownRect = this->rect();
- }
- }
- void QFramelessWindow::mouseMoveEvent(QMouseEvent * event)
- {
- if (resizeRegion != Default)
- {
- handleResize();
- return;
- }
- if(m_move) {
- move(event->globalPos() - dragPos);
- return;
- }
- QPoint clientCursorPos = event->pos();
- QRect r = this->rect();
- QRect resizeInnerRect(resizeBorderWidth, resizeBorderWidth, r.width() - 2*resizeBorderWidth, r.height() - 2*resizeBorderWidth);
- if(r.contains(clientCursorPos) && !resizeInnerRect.contains(clientCursorPos)) { //调整窗体大小
- ResizeRegion resizeReg = getResizeRegion(clientCursorPos);
- setResizeCursor(resizeReg);
- if (m_drag && (event->buttons() & Qt::LeftButton)) {
- resizeRegion = resizeReg;
- handleResize();
- }
- }
- else { //移动窗体
- setCursor(Qt::ArrowCursor);
- if (m_drag && (event->buttons() & Qt::LeftButton)) {
- m_move = true;
- move(event->globalPos() - dragPos);
- }
- }
- }
- void QFramelessWindow::mouseReleaseEvent(QMouseEvent *event)
- {
- m_drag = false;
- if(m_move) {
- m_move = false;
- handleMove(event->globalPos()); //鼠标放开后若超出屏幕区域自动吸附于屏幕顶部/左侧/右侧
- }
- resizeRegion = Default;
- setCursor(Qt::ArrowCursor);
- }
- void QFramelessWindow::setResizeCursor(ResizeRegion region)
- {
- switch (region)
- {
- case North:
- case South:
- setCursor(Qt::SizeVerCursor);
- break;
- case East:
- case West:
- setCursor(Qt::SizeHorCursor);
- break;
- case NorthWest:
- case SouthEast:
- setCursor(Qt::SizeFDiagCursor);
- break;
- default:
- setCursor(Qt::SizeBDiagCursor);
- break;
- }
- }
- ResizeRegion QFramelessWindow::getResizeRegion(QPoint clientPos)
- {
- if (clientPos.y() <= resizeBorderWidth) {
- if (clientPos.x() <= resizeBorderWidth)
- return NorthWest;
- else if (clientPos.x() >= this->width() - resizeBorderWidth)
- return NorthEast;
- else
- return North;
- }
- else if (clientPos.y() >= this->height() - resizeBorderWidth) {
- if (clientPos.x() <= resizeBorderWidth)
- return SouthWest;
- else if (clientPos.x() >= this->width() - resizeBorderWidth)
- return SouthEast;
- else
- return South;
- }
- else {
- if (clientPos.x() <= resizeBorderWidth)
- return West;
- else
- return East;
- }
- }
- void QFramelessWindow::handleMove(QPoint pt)
- {
- QPoint currentPos = pt - dragPos;
- if(currentPos.x()<desktop->x()) { //吸附于屏幕左侧
- currentPos.setX(desktop->x());
- }
- else if (currentPos.x()+this->width()>desktop->width()) { //吸附于屏幕右侧
- currentPos.setX(desktop->width()-this->width());
- }
- if(currentPos.y()<desktop->y()) { //吸附于屏幕顶部
- currentPos.setY(desktop->y());
- }
- move(currentPos);
- }
- void QFramelessWindow::handleResize()
- {
- int xdiff = QCursor::pos().x() - resizeDownPos.x();
- int ydiff = QCursor::pos().y() - resizeDownPos.y();
- switch (resizeRegion)
- {
- case East:
- {
- resize(mouseDownRect.width()+xdiff, this->height());
- break;
- }
- case West:
- {
- resize(mouseDownRect.width()-xdiff, this->height());
- move(resizeDownPos.x()+xdiff, this->y());
- break;
- }
- case South:
- {
- resize(this->width(),mouseDownRect.height()+ydiff);
- break;
- }
- case North:
- {
- resize(this->width(),mouseDownRect.height()-ydiff);
- move(this->x(), resizeDownPos.y()+ydiff);
- break;
- }
- case SouthEast:
- {
- resize(mouseDownRect.width() + xdiff, mouseDownRect.height() + ydiff);
- break;
- }
- case NorthEast:
- {
- resize(mouseDownRect.width()+xdiff, mouseDownRect.height()-ydiff);
- move(this->x(), resizeDownPos.y()+ydiff);
- break;
- }
- case NorthWest:
- {
- resize(mouseDownRect.width()-xdiff, mouseDownRect.height()-ydiff);
- move(resizeDownPos.x()+xdiff, resizeDownPos.y()+ydiff);
- break;
- }
- case SouthWest:
- {
- resize(mouseDownRect.width()-xdiff, mouseDownRect.height()+ydiff);
- move(resizeDownPos.x()+xdiff, this->y());
- break;
- }
- }
- }
Qt框架,GUI应用程序,跨平台开发,信号与槽机制,QML语言,模型视图编程,多线程编程,数据库编程,网络编程,XML解析,JSON解析,图形图像处理,用户界面设计,动画效果,OpenGL,WebKit,嵌入式开发,客户端/服务器应用程序.自定义控件QT6,C++语言基础,qt基础编程,qt软件开发,Qt架构设计,qt布局管理器,qt嵌入式开发,qt编程入门,qt数据库编程,qt跨平台框架,QT项目实战,Quick模块,OpenCV,Qt实战,OpenCV教程,QT界面开发,Qt框架,C++数据结构,Qt线程,桌面应用开发,qt桌面应用开发,Socket网络编程,qt开发工程师,qt开发,应用程序开发框架,图形视图框架,数据库编程,Qt开发编程,Qt开发控件,Qt开发工程师,QT开发必备技能栈,qt编码,qt网络编程,qt网络通信,Qt信号,Qt槽机制,qt字符串,qt数据类型,qt容器,qt客户端开发,qt软件工程师,qt页面绘制
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
本文的方案还附加了一个自动吸附功能,各位如果不需要的话,可以移除。
附上全局枚举及变量:
- enum ResizeRegion
- {
- Default,
- North,
- NorthEast,
- East,
- SouthEast,
- South,
- SouthWest,
- West,
- NorthWest
- };
- bool m_drag, m_move;
- QPoint dragPos, resizeDownPos;
- const int resizeBorderWidth = 5;
- ResizeRegion resizeRegion;
- QRect mouseDownRect;
最后郑重提醒:别忘了在构造函数加上这句setMouseTracking(true); 切记切记!!!
Qt框架,GUI应用程序,跨平台开发,信号与槽机制,QML语言,模型视图编程,多线程编程,数据库编程,网络编程,XML解析,JSON解析,图形图像处理,用户界面设计,动画效果,OpenGL,WebKit,嵌入式开发,客户端/服务器应用程序.自定义控件QT6,C++语言基础,qt基础编程,qt软件开发,Qt架构设计,qt布局管理器,qt嵌入式开发,qt编程入门,qt数据库编程,qt跨平台框架,QT项目实战,Quick模块,OpenCV,Qt实战,OpenCV教程,QT界面开发,Qt框架,C++数据结构,Qt线程,桌面应用开发,qt桌面应用开发,Socket网络编程,qt开发工程师,qt开发,应用程序开发框架,图形视图框架,数据库编程,Qt开发编程,Qt开发控件,Qt开发工程师,QT开发必备技能栈,qt编码,qt网络编程,qt网络通信,Qt信号,Qt槽机制,qt字符串,qt数据类型,qt容器,qt客户端开发,qt软件工程师,qt页面绘制
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
Qt框架,GUI应用程序,跨平台开发,信号与槽机制,QML语言,模型视图编程,多线程编程,数据库编程,网络编程,XML解析,JSON解析,图形图像处理,用户界面设计,动画效果,OpenGL,WebKit,嵌入式开发,客户端/服务器应用程序.自定义控件QT6,C++语言基础,qt基础编程,qt软件开发,Qt架构设计,qt布局管理器,qt嵌入式开发,qt编程入门,qt数据库编程,qt跨平台框架,QT项目实战,Quick模块,OpenCV,Qt实战,OpenCV教程,QT界面开发,Qt框架,C++数据结构,Qt线程,桌面应用开发,qt桌面应用开发,Socket网络编程,qt开发工程师,qt开发,应用程序开发框架,图形视图框架,数据库编程,Qt开发编程,Qt开发控件,Qt开发工程师,QT开发必备技能栈,qt编码,qt网络编程,qt网络通信,Qt信号,Qt槽机制,qt字符串,qt数据类型,qt容器,qt客户端开发,qt软件工程师,qt页面绘制
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。