位置: 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语言中数组的定义和使用)

  • emui11是鸿蒙系统吗

    emui11是鸿蒙系统吗

  • 序列号显示无法验证购买日期啥意思(序列号显示无法查看保障状态)

    序列号显示无法验证购买日期啥意思(序列号显示无法查看保障状态)

  • 抖音无效视频怎么解决(抖音无效视频怎么取消掉)

    抖音无效视频怎么解决(抖音无效视频怎么取消掉)

  • 小米手机无线网络连接上但上不了网怎么办(小米手机无线网络连接不上怎么办)

    小米手机无线网络连接上但上不了网怎么办(小米手机无线网络连接不上怎么办)

  • 三星s8怎么退出recovery模式(三星s8怎么退出挖煤模式)

    三星s8怎么退出recovery模式(三星s8怎么退出挖煤模式)

  • 微信怎么看历史评论过的消息(微信怎么看历史头像)

    微信怎么看历史评论过的消息(微信怎么看历史头像)

  • 闲鱼上的苹果手机为什么这么便宜(闲鱼上的苹果手机可靠吗)

    闲鱼上的苹果手机为什么这么便宜(闲鱼上的苹果手机可靠吗)

  • 拼多多如何撤销工单(拼多多如何撤销物流投诉申请)

    拼多多如何撤销工单(拼多多如何撤销物流投诉申请)

  • i79700不超频配什么主板(i79700kf不超频配什么主板)

    i79700不超频配什么主板(i79700kf不超频配什么主板)

  • 微博不能评论的原因(微博不能评论的文章)

    微博不能评论的原因(微博不能评论的文章)

  • 无法连接版本服务器什么意思(无法连接版本服务器)

    无法连接版本服务器什么意思(无法连接版本服务器)

  • 苹果手机外音没声音什么原因(苹果手机外音没有了,耳机可以是怎么回事)

    苹果手机外音没声音什么原因(苹果手机外音没有了,耳机可以是怎么回事)

  • 微视是不是正规的(微视是不是正规公司)

    微视是不是正规的(微视是不是正规公司)

  • 抖音上显示超级乐迷是什么意思(抖音superb太)

    抖音上显示超级乐迷是什么意思(抖音superb太)

  • word1厘米等于多少磅(word 厘米)

    word1厘米等于多少磅(word 厘米)

  • e5300相当于i几(e5300相当于什么水平)

    e5300相当于i几(e5300相当于什么水平)

  • 微信语音可以闭麦么(微信语音可以闭声音吗)

    微信语音可以闭麦么(微信语音可以闭声音吗)

  • 饿了么发票信息在哪里(饿了么发票信息怎么修改)

    饿了么发票信息在哪里(饿了么发票信息怎么修改)

  • 交换机的交换模式(交换机的交换模式分为)

    交换机的交换模式(交换机的交换模式分为)

  • 苹果11pro max支持5G吗(苹果11pro max支持wifi6吗)

    苹果11pro max支持5G吗(苹果11pro max支持wifi6吗)

  • 怎么下载公众号视频(电子医保怎么下载公众号)

    怎么下载公众号视频(电子医保怎么下载公众号)

  • 怎么把文档转成文件(怎么把文档转成pdf格式的文件)

    怎么把文档转成文件(怎么把文档转成pdf格式的文件)

  • npm info: node: --openssl-legacy-provider is not allowed in NODE_OPTIONS

    npm info: node: --openssl-legacy-provider is not allowed in NODE_OPTIONS

  • 华为路由器怎么做普通密码Telnet认证(华为路由器怎么设置wifi密码)

    华为路由器怎么做普通密码Telnet认证(华为路由器怎么设置wifi密码)

  • YOLOv5、v7改进之二十六:改进特征融合网络PANet为ASFF自适应特征融合网络(yolov5改进点)

    YOLOv5、v7改进之二十六:改进特征融合网络PANet为ASFF自适应特征融合网络(yolov5改进点)

  • 管理费用不计入成本吗?
  • 收到银行承兑汇票怎么接收
  • 企业有利润要交什么税
  • 被告承担诉讼费用
  • 电子税务局财务负责人实名认证
  • 公司清算后未处理财产
  • 支付房屋租金计入什么会计科目
  • 设备安装增值税适用税率
  • 2021年路桥费抵扣最新政策
  • 预缴税款附加税怎么弄
  • 增值税主要有三种类型
  • 转让股权收入属于企业所得税收入吗
  • 企业交残疾人基金会计分录怎么做
  • 增值税抵扣联退税多少
  • 个人所得税生产经营所得
  • com2us密码找回
  • 商业承兑汇票分为哪两种
  • 法人车无偿给公司使用合法吗
  • php 签名算法
  • 如何用home
  • win10无法运行软件怎么回事
  • wordpress介绍
  • 低值易耗品报废账务处理
  • php入门课程
  • 如何检查路由器防火墙设置
  • PHP new static 和 new self详解
  • thinkphp d
  • 通俗易懂的炒货店名字
  • 写字楼买卖办手续
  • vue开发视频教程
  • bert数据增强
  • 2023年highway-env更新之后的使用记录(含DDQN,DuelingDQN,DDQN+OtherChanges) 入门到入土,再踩坑就不玩原神了
  • 导入vue.js
  • 命令压缩文件
  • 增值税免税申报
  • 施工企业内部常设置?主要出实验报告
  • 财务费用税前扣除标准是多少
  • viite
  • python中如何创建一个新文件
  • cms静态页面生成原理
  • 企业应付账款明细表
  • 上年所得税费用借方有余额,怎么调整
  • 如何关闭mysqld
  • mysql启动器
  • 年终奖影响社保缴费基数吗
  • 退货开具红字发票说明
  • 土地增值税扣除项目税金包括哪些
  • 入库库存商品
  • 员工意外伤害险入什么会计科目
  • 发票上的收款人和复核人不写可以吗
  • 印花税的其他凭证指的是什么
  • 工资发多了可以追回吗
  • 你知道实施“营改增”对企业有哪些积极的效应么?
  • 股东投入的资金在现金流量表中如何提现
  • 销售折让如何核算
  • 确定收入 记账凭证摘要怎么写
  • 净现值率和现值指数与净现值什么时候它们评价结果一致
  • 奖励罚款怎么做分录
  • mysql操作教程
  • fedora29
  • 电脑xp系统的设置在哪
  • windows7怎么说
  • 安装win8.1系统步骤
  • win8.1技巧
  • win8查看已连接的wifi密码
  • linux安装与基本命令
  • 网站出现问题怎么办
  • cocos2d怎么用
  • 阿J的cocos2d-x学习笔记-元素消消看(四)-可发展的空间及游戏开发中的问题
  • js对话框确定事件
  • dos命令怎么写
  • Python 数据清洗
  • 如何用node搭建服务器
  • jquery 表单
  • 实现断点续传的工具软件
  • javascript密码框
  • 江苏省发票真伪查询网站
  • 花卉种植税收优惠政策案例
  • 外贸公司委托加工的账务怎么处理
  • 北京税务局待遇有住宿吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设