Qt-demo高级感无边框窗口、美化基础控件

展示:

代码实现:

// 鼠标按下事件(记录拉伸窗口或移动窗口时的起始坐标(左上角))
void framelessWidget::mousePressEvent(QMouseEvent *event)
{if(event->button() == Qt::LeftButton){mousePressed = true;
#if (QT_VERSION >= QT_VERSION_CHECK(6,0,0))lastPos = event->globalPosition().toPoint() - this->frameGeometry().topLeft();
#elselastPos = event->globalPos() - this->frameGeometry().topLeft();
#endif}
}// 鼠标移动事件
void framelessWidget::mouseMoveEvent(QMouseEvent *event)
{if(event->buttons() == Qt::NoButton)mousePressed = false;if(!mousePressed){ // 鼠标没按下移动,更新鼠标位置状态mouseState = 0;if(!maximized && abs(event->pos().x() - ui->mainWidget->pos().x()) < 5)mouseState |= AT_LEFT;if(!maximized && abs(event->pos().y() - ui->mainWidget->pos().y()) < 5)mouseState |= AT_TOP;if(!maximized && abs(event->pos().x() - ui->mainWidget->pos().x() - ui->mainWidget->width()) < 5)mouseState |= AT_RIGHT;if(!maximized && abs(event->pos().y() - ui->mainWidget->pos().y() - ui->mainWidget->height()) < 5)mouseState |= AT_BOTTOM;if(mouseState == AT_TOP_LEFT  || mouseState == AT_BOTTOM_RIGHT)setCursor(Qt::SizeFDiagCursor);else if(mouseState == AT_TOP_RIGHT || mouseState == AT_BOTTOM_LEFT)setCursor(Qt::SizeBDiagCursor);else if(mouseState & (AT_LEFT | AT_RIGHT))setCursor(Qt::SizeHorCursor);else if(mouseState & (AT_TOP | AT_BOTTOM))setCursor(Qt::SizeVerCursor);elseunsetCursor();}else{ //鼠标按下移动if(mouseState == 0){if(maximized){qreal wRatio = (double)event->pos().x() / (double)ui->mainWidget->width();controlWindowScale();
#if (QT_VERSION >= QT_VERSION_CHECK(6,0,0))this->move(QPoint(event->globalPosition().x() - ui->mainWidget->width() * wRatio, -30));
#elsethis->move(QPoint(event->globalPos().x() - ui->mainWidget->width() * wRatio, -30));
#endiflastPos = QPoint(ui->mainWidget->width() * wRatio, event->pos().y());}else
#if (QT_VERSION >= QT_VERSION_CHECK(6,0,0))this->move(event->globalPosition().toPoint() - lastPos);
#elsethis->move(event->globalPos() - lastPos);
#endif}else{
#if (QT_VERSION >= QT_VERSION_CHECK(6,0,0))QPoint d = event->globalPosition().toPoint() - frameGeometry().topLeft() - lastPos;
#elseQPoint d = event->globalPos() - frameGeometry().topLeft() - lastPos;
#endifif(mouseState & AT_LEFT){this->move(this->frameGeometry().x() + d.x(), this->frameGeometry().y());this->resize(this->width() - d.x(), this->height());}if(mouseState & AT_RIGHT){this->resize(this->width() + d.x(), this->height());}if(mouseState & AT_TOP){this->move(this->frameGeometry().x(), this->frameGeometry().y() + d.y());this->resize(this->width(), this->height() - d.y());}if(mouseState & AT_BOTTOM){this->resize(this->width(), this->height() + d.y());}}
#if (QT_VERSION >= QT_VERSION_CHECK(6,0,0))lastPos = event->globalPosition().toPoint() - this->frameGeometry().topLeft();
#elselastPos = event->globalPos() - this->frameGeometry().topLeft();
#endif}
}// 窗口变化事件
void framelessWidget::resizeEvent(QResizeEvent *event)
{//Resize borderif(border)border->resize(ui->mainWidget->size() + QSize(2, 2));//Resize maskQPainterPath path;
#ifdef Q_OS_WINDOWSpath.addRoundedRect(ui->mainWidget->rect(), cornerRadius - 1, cornerRadius - 1);
#elsepath.addRect(ui->mainWidget->rect());
#endifQRegion mask(path.toFillPolygon().toPolygon());ui->mainWidget->setMask(mask);//Resize all pages
//    for(int i = 0; i < pageList.size(); i++){
//        pageList[i]->resize(ui->mainWidget->width() * 0.4 < pageList[i]->preferWidth ? pageList[i]->preferWidth - 1 : ui->mainWidget->width() * 0.4 - 1, ui->mainWidget->height());
//        pageList[i]->resize(pageList[i]->width() + 1, pageList[i]->height());
//    }
}//点击最大化按钮事件
void framelessWidget::controlWindowScale(){
#ifdef Q_OS_WINDOWSif(!maximized){lastGeometry = this->frameGeometry();//  windowShadow->setEnabled(false);ui->verticalLayout->setContentsMargins(0, 0, 0, 0);border->hide();QString mainStyle = "QWidget#mainWidget{background-color:rgb(251,251,251) border-radius:0px;}";ui->mainWidget->setStyleSheet(mainStyle);this->showMaximized();maximized = true;QPainterPath path;path.addRect(ui->mainWidget->rect());QRegion mask(path.toFillPolygon().toPolygon());ui->mainWidget->setMask(mask);}else{ui->verticalLayout->setContentsMargins(30, 30, 30, 30);this->showNormal();QString mainStyle = "QWidget#mainWidget{background-color:rgb(251,251,251)" + QString::asprintf(";border-radius:%dpx", cornerRadius) + "}";ui->mainWidget->setStyleSheet(mainStyle);QPainterPath path;path.addRoundedRect(ui->mainWidget->rect(), cornerRadius - 1, cornerRadius - 1);QRegion mask(path.toFillPolygon().toPolygon());ui->mainWidget->setMask(mask);border->show();//   windowShadow->setEnabled(true);this->resize(lastGeometry.width(), lastGeometry.height());this->move(lastGeometry.x(), lastGeometry.y());maximized = false;}
#endif
}

三连可分享全部源码哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/21992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

傅立叶变换矩阵的频谱响应

傅立叶变换矩阵的频谱响应 线性变换可以用矩阵表示&#xff0c;傅立叶变换是一种线性变换&#xff0c;因此也可以使用矩阵表示。具体可以参考&#xff1a;离散傅立叶变换和线性变换的关系&#xff1a;什么是线性空间&#xff1f; 1、傅立叶矩阵 X [ k ] ∑ n 0 N − 1 x [ …

【EI会议/稳定检索】2024年电机与电气控制国际会议(ICMEC 2024)

2024 International Conference on Motor and Electrical Control 2024年电机与电气控制国际会议 【会议信息】 会议简称&#xff1a;ICMEC 2024 截稿时间&#xff1a;(以官网为准&#xff09; 大会地点&#xff1a;中国厦门 会议官网&#xff1a;www.meciac.com 会议邮箱&…

每日十题---三

1. Vue中$nextTick原理 1. 简单的理解就是它就是一个setTimeout函数&#xff0c;将函数放到异步后去处理。 2. Vue 在更新 DOM 时是异步执行的。只要侦听到数据变化&#xff0c;Vue 将开启一个队列&#xff0c;并缓冲在同一事件循环中发生的所有数据变更。如果同一个 watcher 被…

海外仓代发系统选择标准:功能稳定和性价比高一个都不能少

对海外仓来说&#xff0c;一件代发基本都是比较核心的业务。不过这个核心业务现在的竞争确实也比较大&#xff0c;对海外仓企业而言&#xff0c;想在一件代发上做到让客户满意&#xff0c;还是需要多方面努力的。 一方面&#xff0c;需要自己的仓库管理模式足够标准化&#xf…

高校实验室危险化学品及重大危险源安全管理系统

高校实验室危险化学品及重大危险源安全管理的重要性&#xff1a; 保障师生安全&#xff1a;通过严格管理&#xff0c;可以有效地降低这些风险&#xff0c;确保师生在实验室内的安全。 确保实验教学质量&#xff1a;良好的危化品管理能够确保实验材料的准确性和可靠性&#xff0…

SwiftUI 利用 Swizz 黑魔法为系统创建的默认对象插入新协议方法(一)

功能需求 在 SwiftUI 的开发中,我们往往需要借助底层 UIKit 的“上帝之手”来进一步实现额外的定制功能。比如,在可拖放(Dragable)SwiftUI 的实现中,会缺失一些关键的回调方法让我们这些秃头码农们“欲哭无泪” 如上图所示,我们在拖放取消时将界面中的一切改变都恢复如初…

2024永久免费版CorelDRAW安装包下载附CDR2024激活码序列号

CorelDRAW2024作为一款备受关注的图形设计软件&#xff0c;其最新版本集成了一系列创新工具和功能&#xff0c;旨在提升设计师和艺术家的工作效率与创作自由度。这一版本在用户界面设计、矢量图绘制、色彩管理和文件支持等方面都进行了更新&#xff0c;吸引了广泛的关注。本文将…

目标检测基础初步学习

目标检测&#xff08;Object Detection&#xff09; 目标检测任务说明 在动手学习深度学习中对目标检测任务有如下的描述。 图像分类任务中&#xff0c;我们假设图像中只有一个主要物体对象&#xff0c;我们只关注如何识别其类别。 然而&#xff0c;很多时候图像里有多个我们…

【C++软件调试技术】什么是pdb文件?如何使用pdb文件?哪些工具需要使用pdb文件?

目录 1、什么是pdb文件&#xff1f; 2、如何配置生成pdb文件&#xff1f; 3、pdb文件的时间戳和文件名称 3.1、pdb文件的时间戳 3.2、pdb文件的文件名称 4、有pdb文件才能在Visual Studio中调试代码 5、在Windbg中使用pdb文件 5.1、使用lm命令查看二进制文件的时间戳&a…

翻译《The Old New Thing》- Why do atoms start at 0xC000?

Why do atoms start at 0xC000? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20080429-00/?p22543 Raymond Chen 2008年04月03日 有两种类型的原子&#xff0c;即所谓的整数原子&#xff0c;它们只是一些小整数&#xff0c;还有就是没有…

GE的六西格玛是怎么成功的?

六西格玛作为一种先进的质量管理方法&#xff0c;旨在通过消除缺陷、提高流程效率来降低成本、增强客户满意度。GE作为最早采用六西格玛的公司之一&#xff0c;其成功的原因首先离不开高层领导对精益六西格玛理念的坚定支持和推动。公司高层不仅亲自参与培训和项目实践&#xf…

何为云防护?有何作用

云防护又称云防御。随着Internet互联网络带宽的增加和多种DDOS 黑客工具的不断发布&#xff0c;云计算越演越热&#xff0c;DDOS拒绝服务攻击的实施越来越容易&#xff0c;DDOS攻击事件正在成上升趋势。出于商业竞争、打击报复和网络敲诈等多种因素&#xff0c;导致很多IDC 托管…

一分钟了解香港的场外期权报价

香港的场外期权报价 在香港这个国际金融中心&#xff0c;场外期权交易是金融市场不可或缺的一部分。场外期权&#xff0c;作为一种非标准化的金融衍生品&#xff0c;为投资者提供了在特定时间以约定价格买入或卖出某种资产的机会。对于希望参与这一市场的投资者来说&#xff0…

电脑记事本怎么恢复之前的内容记录

每个人都曾有过这样的时刻——在记事本上精心记录下的重要内容&#xff0c;一不小心就被删除了。那种心情&#xff0c;仿佛一瞬间从山顶跌落到谷底&#xff0c;无尽的懊悔涌上心头。我也曾遭遇过这样的困境&#xff0c;那些消失的文字对我来说意义非凡&#xff0c;它们的丢失仿…

基于小波变换贝叶斯LMMSE估计的图像降噪方法(MATLAB 2018)

自从小波被发现以来&#xff0c;由于其优良的时频局部化性能&#xff0c;大大解决了信号与图像降噪的难题。利用小波降噪大致有三种方法&#xff0c;分别是基于小波模极大值原理、基于小波变换系数的相关性&#xff0c;和最为常用的小波阈值函数法。 基于小波模极大值降噪 该…

AI程序员来了,大批码农要失业

根据GitHub发布的《Octoverse 2021年度报告》&#xff0c;2021年中国有755万程序员&#xff0c;排名全球第二。 ChatGPT的出现&#xff0c;堪比在全球互联网行业点燃了一枚“核弹”&#xff0c;很多人都会担心“自己的工作会不会被AI取代”。 而2024年的AI进展速度如火箭般&am…

S4 BP 维护

前台输入Tcode:BP 问候填写金税开票信息使用的开户行名称,注释填写金税开票信息使用的开户行代码 屏幕下滑按需填写其他数据,如:街道2,街道3,街道/门牌号,街道4,街道5,区域,邮编、城市、国家、地区、语言,电话(发票地址里的电话(必须是客户开票资料里提供的电话,会…

【MyBatisPlus】MyBatisPlus条件查询

【MyBatisPlus】MyBatisPlus条件查询 文章目录 【MyBatisPlus】MyBatisPlus条件查询1、查询条件方式2、组合条件3、NULL值处理4、查询投影-设置【查询字段、分组】5、查询条件6、字段映射与表名映射问题导入 1、查询条件方式 MyBatisPlus将书写复杂的SQL查询条件进行了封装&…

JSON 数据格式化方法

文章目录 数据介绍IDE 或脚本格式化在线工具网址总结 数据介绍 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;它基于JavaScript 编程语言的一个子集。尽管它起源于 JavaScript&#xff0c;但 JSON 已经成为了一个完全独立于…

2024专精特新趋势论坛,汉王友基分享数字化创新实践之路

5月31日&#xff0c;由深圳市中小企业服务局作为指导单位&#xff0c;36氪主办的“WISE新风向2024专精特新趋势论坛”在粤港澳大湾区顺利举办。 汉王友基作为国家级专精特新“小巨人”企业代表&#xff0c;受邀参加此次大会&#xff0c;企业CTO邓立明先生进行了《数字赋能&…