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

  • miui13妙享中心在哪设置(小米妙享手机端)

    miui13妙享中心在哪设置(小米妙享手机端)

  • 苹果怎么限制地区来电(苹果怎么限制地区下载)

    苹果怎么限制地区来电(苹果怎么限制地区下载)

  • 快手退货商家一直拒绝(快手退货商家一直说没收到货怎么办)

    快手退货商家一直拒绝(快手退货商家一直说没收到货怎么办)

  • iphone11音量键一高一低(iphone11音量键一个好按一个很难按)

    iphone11音量键一高一低(iphone11音量键一个好按一个很难按)

  • internet传统的4种服务功能(internet传统的主要服务功能有什么)

    internet传统的4种服务功能(internet传统的主要服务功能有什么)

  • 微信加入黑名单怎么没有显示(微信加入黑名单怎么拉出来)

    微信加入黑名单怎么没有显示(微信加入黑名单怎么拉出来)

  • 苹果手机不想更新软件怎么设置(苹果手机不想更新系统怎么删除)

    苹果手机不想更新软件怎么设置(苹果手机不想更新系统怎么删除)

  • 华为matepadpro屏幕刷新率(华为matepadpro屏幕比例)

    华为matepadpro屏幕刷新率(华为matepadpro屏幕比例)

  • 耳机r和l是左还是右(耳机的r跟l哪个是左哪个是右)

    耳机r和l是左还是右(耳机的r跟l哪个是左哪个是右)

  • 为什么爱奇艺快进会震动(为什么爱奇艺快捷键打开转到网页了)

    为什么爱奇艺快进会震动(为什么爱奇艺快捷键打开转到网页了)

  • 苹果官网发货要多久(苹果官网发货要过海关吗)

    苹果官网发货要多久(苹果官网发货要过海关吗)

  • ipad电量消耗快怎么办(ipad耗电变快了)

    ipad电量消耗快怎么办(ipad耗电变快了)

  • 苹果x和xs显示屏一样吗(苹果x和xs显示屏一样大吗)

    苹果x和xs显示屏一样吗(苹果x和xs显示屏一样大吗)

  • 京东保修服务要买吗(京东保修服务要发票吗)

    京东保修服务要买吗(京东保修服务要发票吗)

  • 快手制作照片为什么会闪退(快手制作照片为什么模糊)

    快手制作照片为什么会闪退(快手制作照片为什么模糊)

  • 腾讯视频网络连接异常(腾讯视频网络连接情况异常)

    腾讯视频网络连接异常(腾讯视频网络连接情况异常)

  • 虾米音乐怎么用淘宝登录(虾米音乐怎么使用)

    虾米音乐怎么用淘宝登录(虾米音乐怎么使用)

  • iphonexr怎么开nfc(iphonexr怎么开120帧)

    iphonexr怎么开nfc(iphonexr怎么开120帧)

  • 怎么删除朋友圈动态(怎么删除朋友圈不可见朋友的标签)

    怎么删除朋友圈动态(怎么删除朋友圈不可见朋友的标签)

  • 华为手环3pro有闹钟吗(华为手环3pro有闹钟功能吗)

    华为手环3pro有闹钟吗(华为手环3pro有闹钟功能吗)

  • 抖音换发型特效怎么拍(抖音换发型特效在哪里)

    抖音换发型特效怎么拍(抖音换发型特效在哪里)

  • 怎么把图片里的文字提取出来(怎么把图片里的表格转成excel)

    怎么把图片里的文字提取出来(怎么把图片里的表格转成excel)

  • 已知税金及附加怎么算增值税
  • 计提利息要计提手续费吗
  • 购入安装设备的专用材料分录
  • 如何分析成本费用偏高
  • 国债收益率如何定价
  • 微信支付算库存现金还是银行存款
  • 年末未分配利润怎么处理
  • 自然人独资是小规模纳税人吗
  • 应付票据是资产吗
  • 小规模纳税人实收资本
  • 固定资产盘点账务处理
  • 预估收入增值税申报
  • 申请增值税专用发票需要什么资料
  • 取得的进项发票当月不抵扣怎么做账
  • 跨期租金收入税怎么算
  • 审计范围包括什么内容
  • 公司收到一次性吸纳就业补贴款怎么分录
  • 营改增后服务业增值税税率
  • 入库出库模板
  • 企业所得税可以退税吗
  • 事业单位材料费分析怎么写
  • 承兑汇票延期托收证明
  • 凭证金额多记了,已经入账了怎么办
  • 财政拨款税务处理方法
  • 固定资产清查怎么开展
  • 虚拟机怎么安装iso镜像文件
  • 贷款利率计算公式表格
  • vscode国内镜像
  • 如何启用系统引擎
  • 合并报表六大抵消分录
  • windows11安装ubuntu20.04
  • 开票一定要对公户嘛
  • centos配置php环境
  • 企业所得税可以结转以后年度扣除的费用
  • php中数组的常用函数及用法
  • 一条sql在mysql中经过怎样的过程
  • dedecmsv6
  • 技术开发费免税政策
  • 员工持股平台合伙企业如何设立
  • 商业会计与财务会计的相同
  • sqlserver2008触发器语法
  • 处置固定资产增值税收入与企业所得税收入不一致
  • 如何查询工商局每天入驻情况
  • 税款减半征收如何申报
  • 职工福利费如何入账
  • 企业最应避免的外部环境和内部条件组合是
  • 代收会计分录
  • 出口退税进项票跨月勾选
  • 小规模汽车维修管理制度
  • 所得税费用怎么计提
  • 现代服务业包括哪些
  • 固定资产净额怎么计算公式
  • sql语句的子查询
  • cmd 执行sql
  • centos nis
  • winxp如何设置自动关机
  • linux播放mp3命令
  • linux怎样过滤一个关键字
  • 联想win7笔记本怎么进入bios
  • linux内核配置文件
  • apache80端口被占用的解决方法
  • 谷歌浏览器点更新没反应
  • jquery 图片左右滚动
  • cocos 2dx
  • unity商店资源在unity中打开
  • javascript中new Array()和var arr=[]用法区别
  • unity如何得到输入框的输入
  • sql命令语句
  • AutoPainting
  • javascript简明教程
  • javascript怎么学
  • python相似模块用例
  • 安卓模拟器测试
  • jquery根据name
  • 重庆电子税务局怎么开电子发票
  • 广东省税务局电子发票怎么下载
  • 河北怎么网上申请无犯罪证明
  • 税务登记证书怎么办
  • 湖北省国家税务局历任局长
  • 季度财务会计报告怎么写
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设