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

  •  怎样把论坛的推广做好?(怎么把论坛帖子删除)

    怎样把论坛的推广做好?(怎么把论坛帖子删除)

  • 怎么退出别人的小米账号(怎么退出别人的apple ID)

    怎么退出别人的小米账号(怎么退出别人的apple ID)

  • 中国手机号怎么注销账号(中国手机号怎么注册vk账号)

    中国手机号怎么注销账号(中国手机号怎么注册vk账号)

  • oppor15咋取消耳机模式(oppor15手机怎么取消耳机模式)

    oppor15咋取消耳机模式(oppor15手机怎么取消耳机模式)

  • 嘀嘀顺风车上线了吗(滴滴顺风车上架了吗)

    嘀嘀顺风车上线了吗(滴滴顺风车上架了吗)

  • 华为手机深色模式怎么关闭(华为手机深色模式是什么意思)

    华为手机深色模式怎么关闭(华为手机深色模式是什么意思)

  • 扫码辅助注册对自己有没有影响(大街上扫码辅助注册)

    扫码辅助注册对自己有没有影响(大街上扫码辅助注册)

  • 微信解封发nu啥意思(微信解封后别人发的消息能看见吗)

    微信解封发nu啥意思(微信解封后别人发的消息能看见吗)

  • 抖音火山版火苗和火力区别(抖音火山版火苗有什么用)

    抖音火山版火苗和火力区别(抖音火山版火苗有什么用)

  • 苹果xra2108什么意思(apple iphone xr (a2108) 128gb)

    苹果xra2108什么意思(apple iphone xr (a2108) 128gb)

  • 手机卡老是没信号无服务是什么意思(手机卡老是没信号无服务重启后好了)

    手机卡老是没信号无服务是什么意思(手机卡老是没信号无服务重启后好了)

  • 华为账号保护关闭不了怎么办(华为账号保护怎么关)

    华为账号保护关闭不了怎么办(华为账号保护怎么关)

  • 微信蓝心表情什么意思(微信表情包里的蓝色的心在哪)

    微信蓝心表情什么意思(微信表情包里的蓝色的心在哪)

  • 计算机精度取决于什么(计算机运算精度)

    计算机精度取决于什么(计算机运算精度)

  • 没有插耳机,但是手机上有显示怎么办(没有插耳机,但是平板上有显示 怎么办)

    没有插耳机,但是手机上有显示怎么办(没有插耳机,但是平板上有显示 怎么办)

  • 无线网显示已停用是什么意思(无线网显示已停用是怎么回事)

    无线网显示已停用是什么意思(无线网显示已停用是怎么回事)

  • 出行记录查询怎么用(出行记录怎么查询)

    出行记录查询怎么用(出行记录怎么查询)

  • 魅族16sPro怎么开启双击亮屏(魅族16spro使用技巧)

    魅族16sPro怎么开启双击亮屏(魅族16spro使用技巧)

  • 为什么趣键盘表情消失了(为什么趣键盘突然打不开了)

    为什么趣键盘表情消失了(为什么趣键盘突然打不开了)

  • 点微信头像会抖动(点微信头像会抖动怎么办)

    点微信头像会抖动(点微信头像会抖动怎么办)

  • memok开关是干什么的(mock开关)

    memok开关是干什么的(mock开关)

  • 华为meat30上市时间(华为meat30系列)

    华为meat30上市时间(华为meat30系列)

  • 苹果xsmax是2k屏吗

    苹果xsmax是2k屏吗

  • 抖音视频怎样设置个人隐私(抖音视频怎样设置封面)

    抖音视频怎样设置个人隐私(抖音视频怎样设置封面)

  • 时间财富时间币有什么用(时间财富网下载)

    时间财富时间币有什么用(时间财富网下载)

  • Vue3点击侧边导航栏完成切换页面内组件(WEB)(vue侧边栏导航,右侧显示对应内容)

    Vue3点击侧边导航栏完成切换页面内组件(WEB)(vue侧边栏导航,右侧显示对应内容)

  • pinia和vuex的区别 Vuex 和 Pinia 的优缺点 何时使用Pinia,何时使用Vuex(vuex和bus)

    pinia和vuex的区别 Vuex 和 Pinia 的优缺点 何时使用Pinia,何时使用Vuex(vuex和bus)

  • 土增清算尾盘销售
  • 车辆补贴的钱最快多久到账
  • 信用代码证过期银行能转账吗
  • 过了纳税期没有申报
  • 增值税纳税申报表附列资料(三)
  • 资产负债表里的固定资产是原值还是净值
  • 印花税小于1元显示无需申报
  • 房地产企业开发产品转固定资产
  • 买金税盘发票能全额抵进项税吗
  • 房地产企业汇算清缴
  • 发票存在哪些税务风险?
  • 销售部预借差旅费什么凭证
  • 小规模跨年发票可以入账吗
  • 收到汇算清缴退税账务处理
  • 本期增加发生额是指
  • 增值税发票价格低于进项
  • 馒头税率是9么
  • 生产成本和主营业务成本哪个大
  • 发票数量能开0.0几吗
  • 集团公司内部无偿借贷增值税
  • 股权转让怎么办理才合理
  • 本年利润余额负数表示什么意思
  • 1697508577
  • 回迁房所得税处理
  • 消耗性生物资产
  • 用于非应税项目的购进货物或应税劳务
  • 工会经费的银行怎么入账
  • 安装额外语言
  • .exe文件怎么打不开
  • 公司免税是指免的什么税
  • win10提示病毒
  • PHP选项代码
  • 拔罐的好处和坏处除湿
  • html5微博
  • 折旧提取后资金如何处理
  • 脐橙产业可行性报告
  • 赞助收入税务处理
  • php表单的作用是什么
  • 广播影视服务需要许可证吗
  • 企业支付宝账单明细怎么查
  • 餐饮管理公司开发票
  • 运输中合理损耗计入存货成本吗
  • javaweb项目开发的原理
  • 吸收合并的目的是什么
  • 包装物为什么是无菌的
  • 支付水电费如何做账务处理
  • java的范式
  • 食品财务走账
  • 企业所得税研发费用如何加计扣除?
  • 当月入账的进项税必须当月认证吗
  • 企业所得税的成本
  • mysql 连接过多
  • 小规模购进商品怎么做账
  • 服务业如何确定收入
  • 产品出口认证
  • 商品进销差价会计科目流程图模板
  • 进项税留底怎么处理
  • 冲销以前月份的凭证
  • 施工单位代建收费合理吗
  • 信用卡产生滞纳金会影响信用吗
  • 消费税出口退税吗
  • 长期股权投资出售时其他权益变动
  • 银行存款利息收入要交增值税吗
  • 复利年金终值计算器
  • 成本费用和损失的区别
  • MSSQL 2005/2008 日志压缩清理方法小结
  • ubuntu14.04升级
  • 实用的linux命令
  • css div模糊
  • div style display none
  • jquery删除所有class
  • dedecms建站操作
  • 手机运行node.js
  • arm兼容库安卓x86
  • python并发和并行
  • python所有语句
  • 地税局 业务
  • 重庆轨道第五轮19号线路
  • 贸易公司服装
  • 国内货物运输代理行业代码是多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设