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

  • 电脑微信怎么扫描图中二维码(电脑微信怎么扫码登录)

    电脑微信怎么扫描图中二维码(电脑微信怎么扫码登录)

  • 微信如何拉群组聊天(微信如何拉群组联系人)

    微信如何拉群组聊天(微信如何拉群组联系人)

  • 拍立得照片全白怎么办(拍立得照片白色不成像)

    拍立得照片全白怎么办(拍立得照片白色不成像)

  • 充电宝显示out是什么意思(充电宝显示OUT是什么意思)

    充电宝显示out是什么意思(充电宝显示OUT是什么意思)

  • 苹果手机怎么隐藏微信好友发来的信息(苹果手机怎么隐藏软件app图标)

    苹果手机怎么隐藏微信好友发来的信息(苹果手机怎么隐藏软件app图标)

  • x5660相当于什么cpu(x5660相当于i7什么cpu)

    x5660相当于什么cpu(x5660相当于i7什么cpu)

  • 漏液屏会扩散吗(漏液屏会消失吗)

    漏液屏会扩散吗(漏液屏会消失吗)

  • 苹果手机连接蓝牙耳机总是断断续续(苹果手机连接蓝牙耳机怎么连接)

    苹果手机连接蓝牙耳机总是断断续续(苹果手机连接蓝牙耳机怎么连接)

  • 内存电压1.5v可以日常用吗(内存电压1.5v和1.35v)

    内存电压1.5v可以日常用吗(内存电压1.5v和1.35v)

  • 为什么微信收款没有语音播报(为什么微信收款屏幕不显示收款金额显示新消息)

    为什么微信收款没有语音播报(为什么微信收款屏幕不显示收款金额显示新消息)

  • 5g流量和4g流量是分开的吗(5g流量和4g流量消耗一样吗)

    5g流量和4g流量是分开的吗(5g流量和4g流量消耗一样吗)

  • 充电器发热还能继续充电吗(充电器发热对充电器有影响吗)

    充电器发热还能继续充电吗(充电器发热对充电器有影响吗)

  • ios10有深色模式吗(ios10深色模式怎么打开)

    ios10有深色模式吗(ios10深色模式怎么打开)

  • 苹果7人像模式怎么设置(苹果7人像模式怎么设置的)

    苹果7人像模式怎么设置(苹果7人像模式怎么设置的)

  • 飞行模式会漏接短信吗(飞行模式会漏接电话吗)

    飞行模式会漏接短信吗(飞行模式会漏接电话吗)

  • ps饱和度怎么调(ps哪里调饱和度)

    ps饱和度怎么调(ps哪里调饱和度)

  • 黑瀑布屏是什么意思(黑瀑布美发怎么样)

    黑瀑布屏是什么意思(黑瀑布美发怎么样)

  • oppoa9怎么强制重启(oppoa91强制重启)

    oppoa9怎么强制重启(oppoa91强制重启)

  • 龙江人社网络异常什么情况(龙江人社网络异地登录)

    龙江人社网络异常什么情况(龙江人社网络异地登录)

  • 荣耀8xmax多少寸(荣耀8xmax多大英寸)

    荣耀8xmax多少寸(荣耀8xmax多大英寸)

  • 微信指纹锁系统出错怎么回事(微信指纹锁在哪里解除)

    微信指纹锁系统出错怎么回事(微信指纹锁在哪里解除)

  • 微信如何按条件加好友(微信如何按条件查找附近好友的人)

    微信如何按条件加好友(微信如何按条件查找附近好友的人)

  • 通用串行总线usb控制器感叹号(通用串行总线USB控制器驱动感叹号)

    通用串行总线usb控制器感叹号(通用串行总线USB控制器驱动感叹号)

  • wim文件怎么打开详细方法(dwg文件怎么打开)

    wim文件怎么打开详细方法(dwg文件怎么打开)

  • 金税四期怎么查账
  • 一般纳税人附加税优惠政策2023
  • 现金预算属于营业预算吗
  • 股权转让开票怎么做账
  • 特殊性税务处理所得税怎么算
  • 以前年度影响利润吗
  • 个体生产经营所得税税率表
  • 上市公司存货跌价准备怎么看
  • 销售货物的价外费用有哪些
  • 购买的原材料直接用怎么做账
  • 承包方收取分包方费用
  • 质量保证产品一般是指
  • 工会经费滞纳金税率
  • 非营利机构收到专用发票
  • 代销产品缴纳增值税吗
  • 非盈利组织捐赠支出
  • 印花税减免性质代码和项目名称小规模
  • 税收分类编码选错了没事吧
  • 自然灾害造成的存货净损失计入什么科目
  • 通用机打发票能报销不
  • 承兑到期不兑付应起诉哪方?
  • 非流动资产处置净收益是指什么
  • 土地作价入股是否视为土地转让
  • 个人工程款税怎么开
  • 生产成本中的电费计入制造费用吗
  • 主营业务收入需要交增值税吗
  • 如何绕开压缩包密码
  • js图片放大代码
  • 企业收到款项
  • 不动产经营租赁包括哪些内容
  • 销售收入与销售成本
  • php使用方法
  • 结转本月完工产品的成本
  • 进项票留底怎么做分录
  • 技术维护服务费
  • 特定纳税人是什么意思
  • 多个php文件整合到一起
  • phpsystem函数
  • 个人所得税零报税怎么报
  • thinkphp pathinfo
  • jquery弹出层插件
  • 删除命令rm rf
  • 购买超市购物卡会计分录
  • 小规模纳税人出租不动产税率是5%还是3%
  • 什么情况下需要异地预缴增值税
  • 交通费中的高速费指什么
  • 个体工商户怎么开发票
  • 什么是日记账?
  • 挂靠设计公司费用标准如何记账?
  • 个体户怎么开对公账户
  • 如何把有余额的账单删除
  • 固定资产3%减按2%征收增值税申报表如何填写
  • 税务会计账务处理一般方法有哪些
  • 呆账坏账对应五级分类
  • 普票丢失可以用复印件入账吗
  • 资产负债表中没有其他应收款
  • 工会经费应计入
  • 现金流量表补充资料怎么理解
  • 认缴制下实收资本可以一直为零吗
  • 工程结算和工程竣工决算的区别
  • 融资租赁具体操作流程
  • 新准则会计科目解释
  • 无形资产是当月计提折旧吗
  • 企业应收票据
  • MSsql每天自动备份数据库并每天自动清除log的脚本
  • window放大之后怎么缩小
  • macbook和windows
  • Win10预览版更新弹窗如何关闭
  • centos调出命令行
  • linux targz
  • 4G内存时linux的mtrr表不正确的解决
  • w10系统如何
  • import python-docx
  • android 属性动画原理
  • dom操作中获取节点的方法有哪几种
  • 国家税务总局关于进一步优化营改增纳税服务工作的通知
  • 电子税务局登录密码怎么查询
  • 东莞各税务分局电话
  • 石油产品消费税征收
  • 管道运输企业的核心指标是
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设