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

  • 传统营销与互联网营销差异总结(传统营销与互联网营销的不同)

    传统营销与互联网营销差异总结(传统营销与互联网营销的不同)

  • 这些中国式营销词汇正在逐步退出(中国式营销的合理性)

    这些中国式营销词汇正在逐步退出(中国式营销的合理性)

  • iphone图书怎么添加本地书(iphone图书怎么添加字体)

    iphone图书怎么添加本地书(iphone图书怎么添加字体)

  • qq空间没有查看权限什么意思(qq空间没有查看权限会有访客记录吗)

    qq空间没有查看权限什么意思(qq空间没有查看权限会有访客记录吗)

  • 4s微信与此设备不兼容(微信与设备不兼容是什么意思)

    4s微信与此设备不兼容(微信与设备不兼容是什么意思)

  • 微信小程序位置权限怎么打开(微信小程序位置显示错误,如何纠正)

    微信小程序位置权限怎么打开(微信小程序位置显示错误,如何纠正)

  • qq群课堂有回放吗(qq群课堂视频回放)

    qq群课堂有回放吗(qq群课堂视频回放)

  • 小米手机移除动画是什么意思(小米手机移除动画)

    小米手机移除动画是什么意思(小米手机移除动画)

  • 惠普e管家可以卸载吗(惠普E管家可以帮忙下载软件吗)

    惠普e管家可以卸载吗(惠普E管家可以帮忙下载软件吗)

  • 流量卡没有网络怎么办(流量卡没有网络咨询谁)

    流量卡没有网络怎么办(流量卡没有网络咨询谁)

  • 苹果深色模式怎么打开(苹果深色模式怎么放在控制中心)

    苹果深色模式怎么打开(苹果深色模式怎么放在控制中心)

  • 国内流量畅享是什么意思(国内流量畅享是无限流量吗)

    国内流量畅享是什么意思(国内流量畅享是无限流量吗)

  • access数据库主要功能(access数据库主要用于)

    access数据库主要功能(access数据库主要用于)

  • 华为mate30卡槽有几个(华为mate30卡槽有个三角凸起)

    华为mate30卡槽有几个(华为mate30卡槽有个三角凸起)

  • 如何查询iphonex基带(如何查询iPhone序列号)

    如何查询iphonex基带(如何查询iPhone序列号)

  • 苹果11pro美版是双卡吗(苹果12pro美版)

    苹果11pro美版是双卡吗(苹果12pro美版)

  • 魅族16T是双卡双待吗(魅族16双卡还是单卡)

    魅族16T是双卡双待吗(魅族16双卡还是单卡)

  • 华为原厂数据线多长(华为原厂数据线字母)

    华为原厂数据线多长(华为原厂数据线字母)

  • 什么是系统总线和显示器之间的接口(何谓系统总线)

    什么是系统总线和显示器之间的接口(何谓系统总线)

  • 铃声多多怎么导入快手(铃声多多怎么导入酷狗)

    铃声多多怎么导入快手(铃声多多怎么导入酷狗)

  • 百度账号是不是网盘账号(百度账号是不是只能在一个手机上登录)

    百度账号是不是网盘账号(百度账号是不是只能在一个手机上登录)

  • iphone应用图标变暗(苹果手机上app图标突然变了样子)

    iphone应用图标变暗(苹果手机上app图标突然变了样子)

  • 直播伴侣怎么显示评论(直播伴侣怎么显示歌词字幕)

    直播伴侣怎么显示评论(直播伴侣怎么显示歌词字幕)

  • fxredir.exe是什么进程 有什么作用 fxredir进程查询(repair.exe是什么软件)

    fxredir.exe是什么进程 有什么作用 fxredir进程查询(repair.exe是什么软件)

  • 小规模纳税人减按1%政策文件
  • 盈利能力也可以反映短期偿债能力
  • 银行利息支出税前扣除标准
  • 工资进成本还是费用
  • 用餐补贴算在工资里面吗
  • 存在弃置费用的固定资产有哪些
  • 预收账款确认收入会计分录
  • 找贴现公司贴现有风险吗
  • 公司增值税进项税不够还有什么办法处理
  • 免抵退税额账务处理流程
  • 中国银行结算包括哪些内容?怎么做会计分录?
  • 个人股东从公司借款合法吗
  • 网上支付的三种类型
  • 地税附加税分录怎么做?
  • 投资退税申请应怎么写
  • 13个点的发票实际交多少钱
  • 生产成本中材料款年末要全部结转吗
  • 帮客户采购会计分录
  • 升级设备属于什么科目
  • 附加税会计分录2022
  • 增值税专票和普票的区别税率
  • 会计中在建工程与建筑安装工程的区别
  • linux如何管理进程
  • 被辞退有补助金吗
  • et.exe进程占用
  • uniapp实战视频教程
  • PHP:imagepsencodefont()的用法_GD库图像处理函数
  • 什么情况下可以土葬
  • electronx
  • php pdo和mysqli
  • php接口技术实例分析
  • 如何成功安装暗区突围
  • javascript对象有哪些
  • 全网最新的暗号
  • vue做项目的流程
  • 创造未来这首歌是谁
  • 生育保险具体待遇是什么
  • 企业的职工福利费应当按照应付工资总额的14%计提
  • 未开票收入缴纳增值税做账
  • MySQL5.1忘记root密码的解决办法(亲测)
  • phpcms api
  • 债权债务转让会计分录
  • 呆账核销账务处理程序
  • 普通发票税额没有打印全可以用么
  • 以前年度无形资产摊销
  • 一般纳税人登记 核算地址
  • 挂靠指的是什么意思?
  • 小微企业应纳税所得额100万到300万怎么计算
  • 企业关联业务往来情况怎么申报
  • 进项转出转到哪里去
  • 应交税费进项税额转出期末怎么结转
  • 车船税交不交印花税
  • 支付职工培训费是什么科目
  • 专用发票样图
  • 水利基金和印花税会计分录
  • 申报工资总额除以在职人员人数
  • 建账需要准备什么东西
  • sqlserver over
  • mysql数据库备份和恢复
  • mysql varchar2
  • linux转移文件代码
  • ubuntu 手动安装
  • winXP系统还能用吗
  • win7系统无法运行红警游戏
  • xp关闭防火墙命令
  • 查看端口信息命令
  • unity怎么输出文件
  • js小球与边框碰撞反弹
  • popup怎么用
  • python 如何生成随机数
  • js用变量值做参数
  • unity 摄像机
  • jquery更换图片
  • 完税证明和发票的关系
  • 福建省国税局领导班子介绍
  • 百分之13的税率怎么算如何算百分之13的税率
  • 机构改革结束了吗
  • 成都税务举报官网
  • 高新企业人才落户北京
  • 税务师如何执业
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设