Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Qt隐藏系统标题栏,使用自定义标题栏

Qt隐藏系统标题栏,使用自定义标题栏

作者头像
花狗Fdog
发布于 2020-10-28 03:35:28
发布于 2020-10-28 03:35:28
8.5K10
代码可运行
举报
文章被收录于专栏:花狗在Qt花狗在Qt
运行总次数:0
代码可运行

一.前言

       今天我们来实现自定义标题栏的实现,这里面用到了布局,鼠标事件重写等知识点,首先还是自定义标题栏的创作,像下面这样,可放大,可缩小,并且随着窗体大小的改变,控件做自适应调整。有没有感觉狗子的界面做的越来越好看,哈哈,其实只是想告诉大家,孰能生巧,第一次可能很丑,慢慢来嘛,我第一次也被人喷过。废话不多说,看实现。

二.实现

       首先还是先把界面搭建出来,如上图,我知道有很多不会搭建这个布局,确实,我刚学习的时候,书中关于布局也是草草略过,我之前写过一个布局的介绍,大家可以看一下,qt 如何设计好布局和漂亮的界面,当然,你看了其中有关布局的知识,相信我,你依旧还是不能随心所欲的布成自己想要的局。你去百度,关于布局的知识,其实和我上面写的一样,其实这里面还隐藏一些配合,只不过可能这个知识点对于会布局的人来说太简单了,他们会选择性略过。 比如下面几个我能想到的问题:

  • 对顶级窗口进行布局,布局和窗体有一定距离;

解决方法:选中顶级窗体,属性里面找到布局,将红括号内的值改为0,布局和窗体的距离就为0.

  • 拖了一个布局,并且将相关控件加入布局,但是一旦将顶级窗口添加布局,控件大小就会不可控;

解决方法:之所以如此,是因为我们没有指定控件最大值和最小值,这也是为什么大家看到的软件,有一些控件最大化后跟随界面变大,而一些控件是不变化的,就比如最小化,最大化控件等等。大家只需要选中控件,右键选中选中大小限定,就会得到我们想要的大小。

  • 界面放大或者缩小后,控件位置问题;

解决方法:要运用弹簧(horizontalSpacer)这个功能,并灵活运用sizetype这个属性,例如Minimum(最小大小),Maximum(最大大小),Expanding(自适应)等等,比如我们选择了Maximum,界面放大时,我们就不用这个弹簧放大。

然后布局就写到这里

       下面说一下功能的实现,有细心读者可能发现上面的动态图有两个标题栏,这不是骗人嘛,我想说不是骗人,到最后白色的标题栏我们是要隐藏的,为了文章的前后顺序,我们暂时先把他留下。

       先将最小化,最大化以及关闭按钮的功能进行实现,这里可以选择代码实现,也可以在ui界面实现,只不过ui界面实现有一些局限性,由于我们目的是使用自定义标题栏,所以这里直接在ui界面进行实现。

       进行信号和槽绑定后,我们现在就可以使用自定义的标题栏来实现最小化,最大化,关闭,接下来就是将系统的标签栏进行隐藏,如果在这之前,就将系统的标题栏隐藏,那么对于编译后生成的软件关闭将是不方便的。 在主窗体的构造函数加入this->setWindowFlags(Qt::FramelessWindowHint);,编译运行即可隐藏系统标签栏。

       隐藏后,会发现无法我们无法移动窗口了,想要移动窗口,我们需要进行鼠标事件重写,包括mousePressEvent(QMouseEvent *event)mouseMoveEvent(QMouseEvent *event)mouseReleaseEvent(QMouseEvent *event)

首先在mainwindow.h中声明这三个函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    void mousePressEvent(QMouseEvent *event);//鼠标点击
    void mouseMoveEvent(QMouseEvent *event);//鼠标移动
    void mouseReleaseEvent(QMouseEvent *event);//鼠标释放
//添加类成员m_point(QPoint类型)
QPoint m_point;

mianwindow.cpp中进行定义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void MainWindow::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton)
    {
        m_point = event->globalPos()-frameGeometry().topLeft();
        //鼠标位置减去左上角的左边
        //可替换为m_point = event->pos();
    }
}
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
    move(event->globalPos() - m_point);
    //鼠标位置减去按下点的坐标
    //可替换为event->pos() - m_point + pos();
}
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
    Q_UNUSED(event);
    //Q_UNUSED() 没有实质性的作用,用来避免编译器警告
}

对应的m_point = event->globalPos()-frameGeometry().topLeft();可替换为m_point = event->pos();

别忘了加入头文件#include<QMouseEvent> #include<QPoint>

完成上述代码,编译运行,窗口可通过鼠标移动。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/09/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
这是见过最简洁的实现方式awa
这是见过最简洁的实现方式awa
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
Qt编写安防视频监控系统9-自动隐藏光标
这个效果的灵感来自于大屏电子看板系统,在很多系统中尤其是上了大屏的时候,其实在用户不在操作的时候,是很不希望看到那个鼠标箭头指针的,只有当用户操作的时候才显示出来,这个就需要开个定时器定时计算最后一次用户操作的时间,和当前时间比较,如果超过了鼠标未操作隐藏时间,则隐藏鼠标,在Qt中提供了方法qApp->setOverrideCursor(Qt::BlankCursor);这样设置个空白的鼠标指针就表示隐藏鼠标,如果需要恢复调用qApp->restoreOverrideCursor();即可,怎么触发恢复鼠标指针呢?搞个bool存储当前鼠标是否隐藏,在鼠标隐藏的时候置为真,拦截鼠标移动事件,一旦发现之前鼠标处于隐藏状态,则立即恢复指针状态,同时将标志位改为假,不然频繁恢复指针没有意义,只有当指针隐藏的时候才需要恢复一次。
feiyangqingyun
2019/08/21
1.5K0
Qt编写安防视频监控系统9-自动隐藏光标
qtabwidget切换tab_qt tablewidget
完整代码链接:https://github.com/gongjianbo/MyTestCode/tree/master/Qt/MyTabWidget
全栈程序员站长
2022/11/09
1.8K0
qtabwidget切换tab_qt tablewidget
QT软件开发:解决隐藏QWidget标题栏后窗体无法移动问题
一般自定义标题栏时,就需要将原窗口的标题栏隐藏掉。默认情况下窗口无法被鼠标拖动的,需要自己处理鼠标事件,移动窗口达到拖动效果。
DS小龙哥
2022/01/12
1.9K0
Fdog系列(四):使用Qt框架模仿QQ实现登录界面,界面篇。
Fdog系列(三):使用腾讯云短信接口发送短信,数据库写入,部署到服务器,web收尾篇。
花狗Fdog
2021/05/06
4.2K0
QT软件开发: 基于QT设计的完整版视频播放器、多媒体播放器(mdk-sdk)
完整工程源码下载地址(下载即可编译运行): https://download.csdn.net/download/xiaolong1126626497/19387165
DS小龙哥
2022/01/12
6.9K0
QT软件开发:  基于QT设计的完整版视频播放器、多媒体播放器(mdk-sdk)
Qt编写安防视频监控系统3-通道交换
最开始写通道交换的功能的时候,走了很多弯路,比如最开始用最初级的办法,触发交换的时候,先关闭视频,然后设置新的url重新打开视频,这样处理非常低级而且耗内存还卡还很慢,毕竟重新打开视频都需要时间的,快则几百毫秒慢则几秒钟都很有可能,尤其是网络情况不好的情况下,更加糟糕,后面发现自己真傻,完全没有必要去关闭原有视频,毕竟交换仅仅是位置的交换,而不是重新设置视频,可以直接重新布局,将视频控件对应的布局位置调换下即可,这种方法就做到了瞬间交换,视频还是原来的视频,正常播放,根本就没有中断过。
feiyangqingyun
2019/08/20
1.1K0
Qt编写安防视频监控系统3-通道交换
C++ Qt开发:Charts折线图绑定事件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QCharts折线图的常用方法及灵活运用。
王瑞MVP
2023/12/25
6300
C++ Qt开发:Charts折线图绑定事件
自定义Qt对话框
今天就简单简单写个自定义对话框分享给大家。 演示 上代码! 自定义对话框的使用: #include <QApplication> #include <QDebug> #include "Dialog
Qt君
2020/07/17
1.7K0
python pyqt5 卡通人物形状窗体
import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtGui import QPixmap, QPainter, QCursor, QBitmap from PyQt5.QtCore import Qt
用户5760343
2019/07/27
1K0
Qt实战:云曦日历篇
自国务院印发《推进普惠金融发展规划(2016—2020年)》通知以来,各省、自治区、直辖市人民政府、国务院各部委各直属机构积极响应,认真贯彻执行,普惠金融发展已经进入了高潮阶段,各大互联网公司和高校紧跟时代潮流,推出了各种创新性产品和软件,该软件作为一款以培养兴趣,提高学生软件项目的编程项目能力为目的,所创建的一款实用性的软件,以日历为依托,创建了许多相关的特效,优美界面和天气查询、日程管理等实用性功能,且界面等均符合当下青少年的审美需求,是一款紧跟潮流的日历软件
灵彧
2022/10/31
1.5K0
Qt实战:云曦日历篇
Qt截图软件3-实现矩形区域截图
首先我们先获取到当前桌面的完整图片,然后将其放到一个全屏的透明窗口之中,之后,我们在窗口上进行绘制矩形操作,然后获取到绘制的区域即可。
kdyonly
2023/03/03
1.3K0
QT软件开发: 点击鼠标在窗口里绘制矩形(窗口透明背景)
工程下载地址: https://download.csdn.net/download/xiaolong1126626497/21043499
DS小龙哥
2022/01/12
2.1K0
QT软件开发: 点击鼠标在窗口里绘制矩形(窗口透明背景)
Qt编写自定义控件67-通用无边框
在之前的一篇文章中写过一个通用的移动控件,作用就是用来传入任意的widget控件,可以在父类容器中自由移动。本篇文章要写的是一个通用的无边框类,确切的说这不叫控件应该叫组件才对,控件是要看得见的东西,有绘制需求的,而这个需要依附在控件上。在我们平时做的项目中,为了U界面的美观,很多会采用自定义无边框窗体来处理,自己美化标题栏等,都会面临一个相同的问题,就是设置好自定义无边框窗体以后,要自己处理窗体的移动和拉伸,如果有多个无边框窗体,很多人会想到每个地方都写重复的代码来实现移动或者拉伸,何不封装一个类来完成这个功能呢,直接传入窗体即可。在QDialog窗体中可以通过设置一个属性sizeGripEnabled来实现右下角的拉伸,这个还不足以满足所有的需求,很多时候我们还需要在四个角和上下左右都能拉伸大小,这个就需要重写了,安装事件过滤器,识别到鼠标移动到某个区域,鼠标形状自动变化,然后识别是否已经按下,按下的话做对应的处理,对应的处理核心就是重新设置窗体的XY轴坐标和大小。
feiyangqingyun
2019/10/16
1K0
Qt编写自定义控件67-通用无边框
用Qt写软件系列五:一个安全防护软件的制作(1)
引言       又有许久没有更新了。Qt,我心爱的Qt,为了找工作不得不抛弃一段时间,业余时间来学一学了。本来计划要写一系列关于Qt组件美化的博文,但是写了几篇之后就没坚持下去了。技术上倒是问题不大,主要是时间不够充裕。这段时间写几篇关于界面整体设计的博文,从最基础的界面元素开始,到最后构建一个页面元素丰富的桌面应用程序。Trojan Assessment Platform是一个原型设计项目,只是实现了有限的一部分功能。远远还称不上是一个评估平台。这里仅仅侧重于用Qt做界面的实现。 界面预览      
24K纯开源
2018/01/18
1.6K0
用Qt写软件系列五:一个安全防护软件的制作(1)
qt学习笔记(五) QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果
应大家的要求,还是把完整的project文件贴出来,大家省点事:http://www.kuaipan.cn/file/id_48923272389086450.htm
全栈程序员站长
2022/07/12
1.9K0
qt学习笔记(五) QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果
C++曲线图折线图QT窗体绘图excel数据导入
如需安装运行环境或远程调试,可加QQ905733049, 或QQ2945218359由专业技术人员远程协助!
用户9804507
2022/06/06
1.2K0
C++曲线图折线图QT窗体绘图excel数据导入
Qt编写自定义控件7-自定义可拖动多边形
自定义可拖动多边形控件,原创作者是赵彦博(QQ:408815041 zyb920@hotmail.com),创作之初主要是为了能够在视频区域内用户自定义可拖动的多个区域,即可用来作为警戒区域,也可用来其他的处理,拿到对应的多边形坐标集合,本控件的主要难点是如何计算一个点在一个多边形区域内,何时完成一个多边形区域,支持多个多边形。
feiyangqingyun
2019/08/23
1.1K0
Qt编写自定义控件7-自定义可拖动多边形
浅谈基于QT的截图工具的设计与实现
在介绍截图工具设计与实现前,让我们先通过介绍QT的绘图基础知识,让读者有一个比较感性的认识。
w4ngzhen
2023/10/18
5440
浅谈基于QT的截图工具的设计与实现
【QT】事件系统入门——QEvent 基础与示例
事件本身是 操作系统提供的 机制,Qt 也同样把操作系统事件机制进行了封装拿到了 Qt 中,但由于 事件 对应的代码编写起来不方便,因此 Qt 对于事件机制 又进行了进一步的 封装,就得到了 信号槽
IsLand1314
2025/03/14
1580
【QT】事件系统入门——QEvent 基础与示例
[QT]获取鼠标坐标以及按键响应
原文链接:https://blog.csdn.net/humanking7/article/details/80707591
祥知道
2020/03/10
4.6K0
推荐阅读
相关推荐
Qt编写安防视频监控系统9-自动隐藏光标
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验