位置: IT常识 - 正文

Qt--无边框窗口完美(FrameLess)实现,包含缩放和移动功能重写。(qt无边框窗口设计)

编辑:rootadmin
#前言 Qt原本的窗口虽然可以通过QSS样式进行美化,但是只是对客户区有用,对于客户区是无效的。所以想做出一个比较好看的程序,还得自己重写实现无边框窗口。 Qt实现无边框其实一句代码就可以,但是窗口自带的缩放,移动功和关闭功能都会没有,需要自己重写。 setWindowFlags(Qt::Frame ... 前言Qt原本的窗口虽然可以通过QSS样式进行美化,但是只是对客户区有用,对于客户区是无效的。所以想做出一个比较好看的程序,还得自己重写实现无边框窗口。Qt实现无边框其实一句代码就可以,但是窗口自带的缩放,移动功和关闭功能都会没有,需要自己重写。setWindowFlags(Qt::FramelessWindowHint);重写无边框窗口

推荐整理分享Qt--无边框窗口完美(FrameLess)实现,包含缩放和移动功能重写。(qt无边框窗口设计),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:Qt无边框窗口被覆盖,qt无边框窗口,qt无边框窗口拖动,qt无边框窗口最大化,Qt无边框窗口被覆盖,Qt无边框窗口被覆盖,qt无边框窗口缩放,qt无边框窗口缩放,内容如对您有帮助,希望把文章链接给更多的朋友!

1.效果如下2.由于无边框窗口没有了标题栏和最小化,最大化,关闭的按钮,所以需要自己布局相对应的控件,并重写事件。我的布局如下3.事件对应代码

展开//窗口关闭事件void MainWindow::windowClose(){ qApp->exit();}//窗口最小化void MainWindow::windowMin(){ this->showMinimized();}//窗口最大化void MainWindow::windowMax(){ isMaxWin=!isMaxWin; if(isMaxWin) //根据是否最大化窗口,改变对应的图标 { ui->btnMax->setIcon(QIcon(":/icons/normal.png")); this->showMaximized(); } else { ui->btnMax->setIcon(QIcon(":/icons/maxsize.png")); this->showNormal(); }}Qt--无边框窗口完美(FrameLess)实现,包含缩放和移动功能重写。(qt无边框窗口设计)

4.窗口移动事件,需要重写鼠标的点击事件和移动事件

展开void MainWindow::mousePressEvent(QMouseEvent*event){ if(event->button()==Qt::LeftButton) //如果鼠标左键按下 { isPressed=true; curPos=event->pos(); //记录当前的点击坐标 }}void MainWindow::mouseMoveEvent(QMouseEvent*event){ if(isPressed) //如果鼠标左键按下 { this->move(event->pos()-curPos+this->pos()); //窗口移动 }}//鼠标释放void MainWindow::mouseReleaseEvent(QMouseEvent*event){ isPressed=false; }

3.窗口的缩放功能比较麻烦,需要用到windows的消息机制.代码如下

展开//需要包含头文件/* #include <qt_windows.h> #include <Windowsx.h>*///消息处理bool MainWindow::nativeEvent(const QByteArray &eventType, void *message, long *result){ int m_nBorder = 5; //边界宽度 Q_UNUSED(eventType) MSG *param = static_cast<MSG *>(message); switch (param->message) { case WM_NCHITTEST: { int nX = GET_X_LPARAM(param->lParam) - this->geometry().x(); int nY = GET_Y_LPARAM(param->lParam) - this->geometry().y(); *result = HTCAPTION; //判断鼠标位置是否位于窗口边界 if ((nX > 0) && (nX < m_nBorder)) *result = HTLEFT; if ((nX > this->width() - m_nBorder) && (nX < this->width())) *result = HTRIGHT; if ((nY > 0) && (nY < m_nBorder)) *result = HTTOP; if ((nY > this->height() - m_nBorder) && (nY < this->height())) *result = HTBOTTOM; if ((nX > 0) && (nX < m_nBorder) && (nY > 0) && (nY < m_nBorder)) *result = HTTOPLEFT; if ((nX > this->width() - m_nBorder) && (nX < this->width()) && (nY > 0) && (nY < m_nBorder)) *result = HTTOPRIGHT; if ((nX > 0) && (nX < m_nBorder) && (nY > this->height() - m_nBorder) && (nY < this->height())) *result = HTBOTTOMLEFT; if ((nX > this->width() - m_nBorder) && (nX < this->width()) && (nY > this->height() - m_nBorder) && (nY < this->height())) *result = HTBOTTOMRIGHT; if (*result == HTCAPTION) { return false; } return true; } } return QMainWindow::nativeEvent(eventType, message, result);}

4.要实现窗口的正常功能,还需要对窗口的Flags进行一些设置,同时也要给父类设置,要不然会有问题的.其中 Qt::FramelessWindowHint设置窗口为无边框,Qt::Window表示widegt为窗口,Qt::WindowMinimizeButtonHint 程序在任务栏被点击时能够显示/隐藏.

一些问题

1.把以上那些功能实现了,无边框窗口基本可以用了,至于如何用Qss美化,界面如何布局,那就看每个人了,反正可以自己进行定制2.由于用到了windows下的消息机制,所以该实现只适用于Windows系统.虽然我在GitHub上找到不少可以跨平台的无边框窗口实现,但是都不是很完美,有兴趣的自己可以去GitHub上去看看.3.目前的实现方法都会有一些问题,没有原本的好,但基本不影响使用,如果有需要自己也可以进行优化,所以问题不大.

完整项目代码

github: QtFrameLess

星期五女孩

本文链接地址:https://www.jiuchutong.com/zhishi/304761.html 转载请保留说明!

上一篇:织梦DEDECMS栏目后台设置显示,栏目前台怎么隐藏(织梦cms不更新了吗)

下一篇:c语言中数组的三种类型(c语言中数组的定义和使用)

  • 微信公众号的运营心得(微信公众号的运营的基础是流量)

    微信公众号的运营心得(微信公众号的运营的基础是流量)

  • qq回执编号(QQ回执编号是什么)

    qq回执编号(QQ回执编号是什么)

  • ipad获取app转圈后还是获取(ipad获取app没反应)

    ipad获取app转圈后还是获取(ipad获取app没反应)

  • 手机屏开胶了怎样处理(手机屏开胶了怎么办危险么)

    手机屏开胶了怎样处理(手机屏开胶了怎么办危险么)

  • 12123一直显示网络拥堵(12123一直显示网络异常,请稍后再试 -1011)

    12123一直显示网络拥堵(12123一直显示网络异常,请稍后再试 -1011)

  • 打印机亮红灯打印不出来是什么原因(打印机亮红灯打印不出来是什么原因橙灯和绿灯)

    打印机亮红灯打印不出来是什么原因(打印机亮红灯打印不出来是什么原因橙灯和绿灯)

  • 华为nova6se有没有红外(华为nova6se有没有NFC)

    华为nova6se有没有红外(华为nova6se有没有NFC)

  • 支付宝验证人脸照片不清晰无法使用怎么办(支付宝验证人脸对比源照片不够清晰)

    支付宝验证人脸照片不清晰无法使用怎么办(支付宝验证人脸对比源照片不够清晰)

  • 华为手机为什么自动删除视频(华为手机为什么变成黑白屏了)

    华为手机为什么自动删除视频(华为手机为什么变成黑白屏了)

  • qq怎么不用好友辅助验证(qq怎么不用好友辅助验证开小号)

    qq怎么不用好友辅助验证(qq怎么不用好友辅助验证开小号)

  • 苹果手机怎么清理通讯录所有电话(苹果手机怎么清除app数据缓存)

    苹果手机怎么清理通讯录所有电话(苹果手机怎么清除app数据缓存)

  • 微软输入法怎么打顿号(微软输入法怎么打日语)

    微软输入法怎么打顿号(微软输入法怎么打日语)

  • 是什么导致苹果电池健康下降的(苹果手机是因为)

    是什么导致苹果电池健康下降的(苹果手机是因为)

  • qq进群特效怎么关闭(qq进群特效怎么不显示)

    qq进群特效怎么关闭(qq进群特效怎么不显示)

  • 苹果pd快充响几声(iphonepd快充响几声)

    苹果pd快充响几声(iphonepd快充响几声)

  • 快手降权了多久能恢复(快手降权了找谁可以解决)

    快手降权了多久能恢复(快手降权了找谁可以解决)

  • qq群大演说家怎么来的(有没有演讲群)

    qq群大演说家怎么来的(有没有演讲群)

  • 主频和混频哪个电压大(主频和混频哪个好)

    主频和混频哪个电压大(主频和混频哪个好)

  • 苹果6可以升级ios13吗(苹果6可以升级ios15版本吗)

    苹果6可以升级ios13吗(苹果6可以升级ios15版本吗)

  • 微信消息怎么批量已读(微信消息怎么批量设置已读)

    微信消息怎么批量已读(微信消息怎么批量设置已读)

  • 手机usb反向充电怎么回事(手机usb反向充电改不了)

    手机usb反向充电怎么回事(手机usb反向充电改不了)

  • word字体库在哪个文件夹(office2019字体库在哪个文件夹)

    word字体库在哪个文件夹(office2019字体库在哪个文件夹)

  • 华为手机管控中心在哪(华为手机管控中心解除后的应用)

    华为手机管控中心在哪(华为手机管控中心解除后的应用)

  • pos机连不上网络怎么办(pos机连接不上网)

    pos机连不上网络怎么办(pos机连接不上网)

  • 爱奇艺定向流量包是什么(爱奇艺定向流量怎么取消)

    爱奇艺定向流量包是什么(爱奇艺定向流量怎么取消)

  • 开机自动进入安全模式无法退出怎么办(开机自动进入安装模式)

    开机自动进入安全模式无法退出怎么办(开机自动进入安装模式)

  • 缴纳个人所得税怎么算
  • 停车费增值税税率
  • 2020年委托加工的税率是多少
  • 质量赔偿款计入什么会计科目
  • 其他债权投资的交易费用计入什么科目
  • 电子发票怎么开具
  • 所得税申报时成本数据填错怎么办
  • 残保金申报在哪申报
  • 采购是进项还是销项
  • 开票有误的具体
  • 资产减值损失借贷方向
  • 企业购入生产设备所支付的增值税
  • 去年漏记了收入,可以记今年吗
  • 农业企业土地租金会计分录
  • 法律责任的具体内容
  • 买二手车年限久的会怎样
  • 劳务费税率公式是什么
  • 税控盘怎么使用
  • 法人变更了还用变更发票领用本吗
  • 建筑材料增值税税率
  • 红字信息表没有编号
  • 固定资产清理属于资产类的备抵科目吗
  • 销售自建的不动产如何缴纳增值税
  • 1697508581
  • 固定资产 盘点
  • 个人转租房子
  • 抵押房产的保险能退吗
  • 文字转换表格怎么设置行列
  • 2022年最新cpu天梯图手机
  • 建筑行业收到工程款会计分录
  • 运行项目报错Couldn't import Django
  • PHP:Memcached::casByKey()的用法_Memcached类
  • 企业向银行贷款要交印花税吗
  • 贝特阿斯品牌介绍
  • php做
  • PHP:imagesetstyle()的用法_GD库图像处理函数
  • 杜鹃花的养殖方法和修剪
  • 发票开错的常见情况和处理办法?
  • php如何实现
  • thinkphp查询版本号
  • vue错误处理
  • sbc奇思妙想
  • 建行E信通贴现需要发票吗
  • 模糊数学神经网络
  • 2023版最新最全React面试题
  • 谷粒学院项目含金量
  • 怎么修改手机的地理位置
  • 实际成本法核算方法
  • 材料采购是什么类科目
  • 在成本了核算工资怎么算
  • centos7.9 防火墙
  • 一般纳税人零申报报税流程
  • 资产减值损失应在计算()时扣除
  • 债券投资的会计科目有哪些
  • sql server如何进行安全设置
  • 商品削价的核算
  • 土地摊销计入成本还是费用
  • 购买土地需要缴纳哪些费用
  • 暂估入库的税务怎么处理
  • 行政单位维修管理制度
  • 员工拿发票报销账务处理
  • 外贸企业需要取得什么资质
  • 加计抵扣进项税分录
  • MySQL5.7中 performance和sys schema中的监控参数解释(推荐)
  • sql server 服务器配置
  • 取消windows开机登录密码
  • linux 文件执行
  • win10系统无法进入
  • win8开机启动项
  • win10周年版
  • 学习英语
  • js编程代码
  • jquery自定义组件
  • android 样式
  • 简单实现异步编码的方法
  • python ip地址转换
  • python接口编写
  • js math.js
  • 按犍设置
  • 跨区域提供建筑安装服务
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设