QT自定义MainWindow
1.开发环境:Qt 4.7.3 + MinGW 32bit (MSVC2015 32bit)
2.实现大纲:
1)自定义边框,标题栏,工具栏,内容栏,状态栏(后面三个代码中没有实现实现)
2)重写鼠标事件来控制可以自由移动框体
3)样式文件使用qss实现,UI设计/数据/控制分离,方便二次开发
3.具体实现:
1)通常情况下,linux或者window系统下的QMainwindow的边框样式比较原始不太美观,Qt提供了可以舍弃原有的边框,然后自定义。具体设置参数如下:
setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint); //配置边框属性,无边框
setAttribute(Qt::WA_TranslucentBackground); //设置背景半透明
2)关于框体中框线的样式设计,可以采用添加QFrame组件,通过设计QFrame的border相关属性来设置边框线,但是在设计的过程中发现,如果直接添加在mainwindow中添加QFrame组件,然后再设置border属性,发现border属性无效。解决方案可以在QMainwindow和QFrame之间添加一个QWidget作为“画布”,来显示QFrame的边框样式。
3)一般来说,window的标题栏一般包括图标,标题大纲,隐藏/放大/还原/关闭等组件,因此可以添加一个QFrame + QHBoxLayout来配合实现,另外按钮推荐使用QToolButton(使用QPushButton也可以,但是需要设置setAutoDefault为false,否则会在设计Dialog弹框事埋下隐藏的bug,即关于enter按键的响应问题),并且设置其hover属性和tooltip(悬放时提示按钮功能)等属性。
4)接下来需要重新定义鼠标的事件来实现鼠标拖拽mainwindow功能,主要是关于系统的四个函数的复写,通过坐标的决定坐标globalPos()和相对坐标pos()直接的变换来记录移动的距离,从而实现窗体的移动,具体如下:
void mouseReleaseEvent(QMouseEvent *event); //鼠标左键释放
void mouseMoveEvent(QMouseEvent *event); //鼠标左键一直按着,系统提供了event->buttons()来专门判断是否按着
void mousePressEvent(QMouseEvent *event); //鼠标左键按下, 且按下的坐标在标题栏上
void mouseDoubleClickEvent(QMouseEvent *event); //双击事件也就是完成标题栏上的放大按钮的相关功能
4.具体代码见下载地址:https://download.csdn.net/my/uploads
5.实现截图:
QT自定义MainWindow相关推荐
- Qt 自定义信号与槽
注 对象与槽理解 //第一个参数lineEdit是激发事件对象,信号中的方法必须在对象中存在,并在对象类头文件signals下定义,//第二个参数信号,//第三个参数this是槽方法所属类的对象,且必 ...
- QT自定义饼图的外观
QT自定义饼图的外观 项目简介 项目技术 项目展示 主要源码片段解析 获取完整项目源码传送门 项目简介 自定义饼图的外观. 项目技术 qt5.12,qt charts模块,C++ 项目展示
- QT自定义图表上不同元素的外观
QT自定义图表上不同元素的外观 项目简介 项目技术 项目展示 主要源码片段解析 获取完整项目源码传送门 项目简介 自定义图表上不同元素的外观. 项目技术 qt5.12,qt charts模块,C++ ...
- 【Qt】MainWindow窗口状态栏
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 显示菜单动作状态 04. 显示临时信息 05. 显示正常信息 06. 显示永久信息 07. 附录 01. 概述 在程序主窗 ...
- Qt 自定义标题栏,最小化、最大化、关闭窗口,双击最大化,鼠标拖动等效果实现
文章目录 前言 效果 代码 .pro文件 widget.h widget.cpp widget.ui title.h title.cpp title.ui 前言 本次实验内容为Qt自定义标题栏,最小化 ...
- QT 自定义加载等待(Loading)提示框
QT自定义加载等待提示框 一.效果展示 二.源代码 #ifndef LOADINGDIALOG_H #define LOADINGDIALOG_H #include <QMovie> #i ...
- QT自定义Widget控件及其使用
今天来给大家分享一下QT自定义widget控件及其使用,当ui设计器提供的界面不满足实际需求时,可以从QWidget继承自定义的界面组件.有两种方法一种是提升法,另一种是ui设计器自定义界面组件wid ...
- QT 自定义分页控件
Qt 自定义页码控件 一.效果展示 二.头文件 #ifndef PAGECONTROL_H #define PAGECONTROL_H #include <QList> #include ...
- QT自定义精美换肤界面
QT自定义精美换肤界面 陆陆续续用QT开发过很多项目,也用QT写过不少私活项目,也写过N个工具,一直梦寐以求能像VC一样可以很方便的有个自定义的界面,QSS的强大让我看到了很好的希望,辗转百度谷歌无数 ...
最新文章
- 装有linux的硬盘装到不同主机,把ubuntu系统安装进移动硬盘,可在不同电脑上运行...
- DynamicList
- XCTF-Reverse:re1
- 为什么说Android才是游戏开发者的乐土?
- Difference between a normal BSP application and a WebClient UI component
- 请求时才延迟加载JavaScript文件 - 优化篇
- 104种***清除方法
- Windows as a Service(3)——使用SCCM管理Windows10更新
- 沙盘erp模拟人机对抗如何将公司经营6年
- java计算机毕业设计宠物店管理系统源码+数据库+系统+lw文档+部署
- python seek_关于python:seek()函数?
- python程序员面试自我介绍_程序员面试要准备哪些方面的内容?
- 你的面子到底值几斤几两
- 原生js实现放大镜效果
- Address Sanitizer 用法
- 电商产品展示,选360°全景还是3D展示?
- AXI USB 2.0设备IP Core指导手册(第一章)
- RuntimeError: Default process group has not been initialized, please make sure to call init_process_
- 自动挂机打码赚钱是真的么?一美女自述骗局内幕
- 软件工程是不是教不怎么会的写程序的人开发软件?