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

  • airpods左右耳音量不一样怎么调(airpods左右耳音量不一样正常吗)

    airpods左右耳音量不一样怎么调(airpods左右耳音量不一样正常吗)

  • 天猫精灵需要连wifi吗(天猫精灵需要连网吗)

    天猫精灵需要连wifi吗(天猫精灵需要连网吗)

  • qq一起派对怎么关闭的(qq一起派对怎么关闭)

    qq一起派对怎么关闭的(qq一起派对怎么关闭)

  • 苹果12自动调节亮度在哪(苹果12自动调节亮度打开好还是关闭好)

    苹果12自动调节亮度在哪(苹果12自动调节亮度打开好还是关闭好)

  • 显示器输入不支持(显示器输入不支援怎么改回来)

    显示器输入不支持(显示器输入不支援怎么改回来)

  • 电子数字计算机特点是(1946年首台电子数字计算机是)

    电子数字计算机特点是(1946年首台电子数字计算机是)

  • 电池长期不用怎么保存(电池长期不用怎么办)

    电池长期不用怎么保存(电池长期不用怎么办)

  • 录屏失败因为-5823什么意思(录屏失败因为5825什么意思)

    录屏失败因为-5823什么意思(录屏失败因为5825什么意思)

  • 华为激活日期怎么看(华为激活日期怎么算的)

    华为激活日期怎么看(华为激活日期怎么算的)

  • 回收站占用的是什么空间(回收站占用的是内存空间吗)

    回收站占用的是什么空间(回收站占用的是内存空间吗)

  • 华为手机时间和天气显示在桌面怎样设置(华为手机时间和日期在哪里设置)

    华为手机时间和天气显示在桌面怎样设置(华为手机时间和日期在哪里设置)

  • qq密友值在哪看(扣扣密友值在哪里看)

    qq密友值在哪看(扣扣密友值在哪里看)

  • 座机停机多久会被注销(座机停机多久会被注销电信)

    座机停机多久会被注销(座机停机多久会被注销电信)

  • 微信加入黑名单是什么意思(微信加入黑名单和删除有什么区别)

    微信加入黑名单是什么意思(微信加入黑名单和删除有什么区别)

  • xr铝合金边框会掉漆吗(xs铝合金边框)

    xr铝合金边框会掉漆吗(xs铝合金边框)

  • ipad air3屏幕刷新率(ipadair3屏幕刷新率能调吗)

    ipad air3屏幕刷新率(ipadair3屏幕刷新率能调吗)

  • 抖音和tiktok什么关系(tiktok与抖音的区别)

    抖音和tiktok什么关系(tiktok与抖音的区别)

  • 手机上怎么拍证件照(手机上怎么拍证件照,用身份证号码)

    手机上怎么拍证件照(手机上怎么拍证件照,用身份证号码)

  • 快手看直播闪退怎么办(快手直播闪退怎么回事)

    快手看直播闪退怎么办(快手直播闪退怎么回事)

  • mate20和mate30的区别(华为mate20和华为mate30哪个好)

    mate20和mate30的区别(华为mate20和华为mate30哪个好)

  • 腾讯观影券可以看付费电影吗(腾讯观影券可以看超前点播电视剧吗)

    腾讯观影券可以看付费电影吗(腾讯观影券可以看超前点播电视剧吗)

  • 微信语音连接失败怎么回事(微信语音连接失败是拒绝吗)

    微信语音连接失败怎么回事(微信语音连接失败是拒绝吗)

  • 关闭当前窗口快捷键(关闭当前窗口快捷键alt加什么)

    关闭当前窗口快捷键(关闭当前窗口快捷键alt加什么)

  • 组成一个计算机系统的两大部分是(组成一个计算机的两大部分是什么)

    组成一个计算机系统的两大部分是(组成一个计算机的两大部分是什么)

  • 手机可以弄扫描件吗(手机有扫描功能吗)

    手机可以弄扫描件吗(手机有扫描功能吗)

  • Vue3中使用hooks,hooks究竟是个啥?如何理解(vue3 hooks实现)

    Vue3中使用hooks,hooks究竟是个啥?如何理解(vue3 hooks实现)

  • 报验户与正常户的区别
  • 报关金额多报了3000美金
  • 收到预付款的发票怎么写摘要
  • 个体户城建税优惠政策
  • 为什么社保账户有钱但是卡里没钱
  • 小规模纳税人是个体户吗
  • 建筑 设计 招聘
  • 法院退诉讼费账务处理
  • 存货呆滞是什么意思
  • 小企业研发费用科目代码多少合适
  • 企业长期股权投资中发生的相关费用处理方法正确的有
  • 贸易类公司所得税核定征收税率是多少?
  • 公司注册资本会留存多少
  • 税收奖励计入什么科目
  • 基础年收入是什么意思
  • 发票已认证对方起诉有效吗
  • 公益组织接受捐赠怎么开票
  • 借给其他公司借款会计分录
  • 发票金额大于实际支付金额如何报账
  • 某企业存货跌价准备原材料科目贷方
  • 华硕主板bios更新后开不了机
  • 虚拟机系统vmware
  • win7系统中怎样
  • 计提税金会计分录怎么做
  • 分批付款怎么确认收入
  • PHP:mcrypt_module_get_algo_block_size()的用法_Mcrypt函数
  • typescript ??
  • 完美解决在ThinkPHP控制器中命名空间的问题
  • 网络电话综合布线
  • 社保挂靠公司收费标准是怎样的
  • php使用正则表达式提取abcdef
  • php抢红包功能思路
  • 房屋租赁费属于什么税收分类编码
  • 融资租赁固定资产不属于筹资活动
  • 个体工商户加盟店名字和营业执照不符合
  • 公司账本凭证保存期限
  • 退票产生的费用如何报销
  • 外管证预缴税款上报后,怎么交税
  • 业务招待费可以结转吗
  • openglskia是什么意思
  • 织梦前台数据不能存入中文
  • 财政拨付注册资本金说明
  • 工会经费为0是不用申报的?
  • 税款所属期止是怎么写
  • 交易性金融资产公允价值变动怎么算
  • 公司购买劳保用品可以抵扣吗
  • 生产企业成本核算案例
  • 如何区分借贷方和负债方
  • 小规模纳税人去银行开立什么账户
  • 有进项税额转出,怎么计提附加税
  • 委托加工物资的加工费计入什么科目
  • 固定资产租赁费评估
  • 发生额怎么计算
  • 没有水电费发票可以入账吗
  • 营改增后建筑业增值税税率
  • 编制合并财务报表的依据是纳入合并
  • sql语句压缩
  • win8系统打开苹果系统文件
  • mac怎么用浏览器
  • 安全组件异常,请重新下载并安装
  • 苹果mac双系统怎么删除
  • smartagt.exe - smartagt是什么进程 什么文件
  • windows系统后台不显示QQ等软件(任务栏右侧不显示QQ图标)
  • win7怎么查看电池信息
  • kinect unity开发
  • opengl es2
  • nginx react
  • Bullet(cocos2dx)学习制作桌球游戏之前期准备
  • Node.js中的事件循环是什么意思
  • 什么是馥芮白
  • node.js 作用
  • bootstrap制作的网站页面
  • js 判断
  • 税务解除非正常户罚款多少
  • 车船税完税凭证去哪里打印
  • 网上报税失败什么原因
  • 重庆国税税务局官网
  • 未到申报期可以提前抄税吗
  • 为什么阿里会放弃dubbo?
  • 公司汽车用油计入什么科目
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设