定制QWidget标题栏的示例
目录
1 主要代码:
2 隐藏标题栏
3 如何实现窗体拖动
4 关闭按钮的外观和功能
4.1 外观
4.2 功能
5 其他
6 效果
在很多项目里,客户不满意qt自带标题栏的外观,要求开发者自定义一个窗体样式。新的窗体标题栏的背景色可以通过qss定义,且最大化、最小化、关闭三个按钮的位置外观乃至功能都可以定制。本文介绍如何定制这样的标题栏,标题栏只有关闭窗口,且用户可以通过标题栏实现窗体的移动。示例代码见我的资源定制QWidget标题栏的示例,并含有qss配置QTabWidget样式的示例-QT文档类资源-CSDN下载。
1 主要代码:
#include "WgtWrapper.h"
#include "ui_WgtWrapper.h"
#include <QDebug>
#include <QMouseEvent>
#include <QEvent>//这个必须要有,否则event转换失败
#include <QApplication>
#include <QDesktopWidget>WgtWrapper::WgtWrapper(QWidget *parent) :QWidget(parent),ui(new Ui::WgtWrapper)
{ui->setupUi(this);ui->BtnClose->setFixedSize(15,15);setObjectName("DevMonitorWGT");initStyleSheet();setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);//选项Qt::Tool导致关窗口不停止程序m_pTab = new QTabWidget;ui->verticalLayout->addWidget(m_pTab);m_pTab->setAttribute(Qt::WA_StyledBackground);/*与qss中的QTabWidget一起起作用,让qtabwidget表头右侧的空白区域也呈现与QTabWidget::pane一样的风格*/m_pWgt1 = new QWidget;m_pWgt2 = new QWidget;m_pTab->addTab(m_pWgt1, QString("1"));m_pTab->addTab(m_pWgt2, QString("2"));connect(ui->BtnClose, SIGNAL(clicked()), this, SLOT(hide()));ui->WgtTitle->installEventFilter(this);
}WgtWrapper::~WgtWrapper()
{delete m_pWgt1;delete m_pWgt2;delete ui;
}void WgtWrapper::initStyleSheet()
{QString appDirPath = QApplication::applicationDirPath();///界面字体QFile fontFile (appDirPath+"/MonitorConfig/stylesheet.qss");QString fontStr;if (fontFile.open(QIODevice::ReadOnly|QIODevice::Text)){fontStr = fontFile.readAll();fontFile.close();}this->setStyleSheet(fontStr);
}bool WgtWrapper::eventFilter(QObject *watched, QEvent *event)
{if (event->type() == QEvent::MouseButtonPress){if ((static_cast<QMouseEvent *>(event))->button() == Qt::LeftButton)//必须是static cast{m_pntPrev = QApplication::desktop()->cursor().pos();}return true;}else if (event->type() == QEvent::MouseButtonRelease){return true;}else if (event->type() == QEvent::MouseMove){if (QApplication::mouseButtons() == Qt::LeftButton){QPoint pnt = QApplication::desktop()->cursor().pos();move(pos() + pnt - m_pntPrev);m_pntPrev = pnt;}return true;}else{return QObject::eventFilter(watched, event);}
}
2 隐藏标题栏
下面的代码将qwidget原有的标题栏隐藏了:
setWindowFlags(Qt::FramelessWindowHint);//选项Qt::Tool导致关窗口不停止程序
而ui界面中添加了一个自定义的标题栏WgtTitle
WgtTitle的内部又包含一个label,一个弹簧和一个QPushButton(名为BtnClose)
3 如何实现窗体拖动
利用eventFilter,当鼠标拖动WgtTitle时,WgtWrapper的eventFilter截获了这个事件,并获取了鼠标当前位置。随之将当前位置与上一次事件发生时的位置做减法,得出现在移动了多少距离。最后利用move函数实现WgtWrapper的移动。
ui->WgtTitle->installEventFilter(this);
4 关闭按钮的外观和功能
4.1 外观
高亮部分
4.2 功能
通过信号槽实现点击后隐藏窗体的功能:
connect(ui->BtnClose, SIGNAL(clicked()), this, SLOT(hide()));
如果你想点击按钮后直接退出,考虑类似如下的代码:
connect(ui->BtnClose, SIGNAL(clicked()), QApplication::instance(), SLOT(quit()));
5 其他
下面这句代码的作用是让窗体不在桌面的状态栏显示。
setWindowFlags(Qt::Tool);
6 效果
样式通过qss文件配置,这里不再赘述。
定制QWidget标题栏的示例相关推荐
- python图形代码怎么写_【Python3-API】定制化图像接口示例代码
Python3-urllib3-API定制化图像接口示例代码 AccessToken获取可以参考:http://ai.baidu.com/forum/topic/show/497663(Python3 ...
- python实现表格_Python 自由定制表格的实现示例
很多开发者说自从有了 Python/Pandas,Excel 都不怎么用了,用它来处理与可视化表格非常快速. 下面我来举几个例子. 1. 删除重复行和空行 我们直接用dict.fromkeys的方法把 ...
- python定制订单_Python 自由定制表格的实现示例
很多开发者说自从有了 Python/Pandas,Excel 都不如何用了,用它来处理与可视化表格非常快速. 下面我来举几个例子. 1. 删除重复行和空行 我们直接用dict.fromkeys的方法把 ...
- Qt实战案例(42)——利用Qt实现自定义标题栏功能(自定义最大化、最小化、关闭等功能)
目录 一.项目介绍(为什么要自自定义标题栏功能) 二.项目基本配置 三.UI界面设计 四.主程序实现 4.1 隐藏边框 4.2 设置最大化(还原),最小化,关闭按钮的样式风格 4.3 关闭按钮的实现 ...
- Android—— 定制界面风格
统一的用户界面是可以使得应用程序更友好.要做到用户界面的统一,我们就必须用到风格(style)和主题(theme).OPhone系统提供了很多系统默认的风格和主题,但是很多情况下,这些不能满足我们的需 ...
- linux进程及作业管理实验,Linux 进程及作业管理(示例代码)
Linux 进程及作业管理 概述: 一.进程的相关概念: 1.相关定义:内核的功用: 进程管理.文件系统.网络功能.内存管理.驱动程序.安全功能等: 通俗的来说进程是运行起来的程序.唯一标识进程的 ...
- tensorflow 开始——创建定制化 Estimator(创建自定义评估器)
参考文章:创建定制化 Estimator 文章目录 创建定制化 Estimator 预制 vs. 定制化 创建功能列 写一个模型函数 定义模型 定义输出层 隐藏层 输出层 实现训练.评估.预测 {#m ...
- jboss as7 下载_JBoss AS 7:定制登录模块
jboss as7 下载 JBoss AS 7很整洁,但是文档仍然很缺乏(错误消息没有那么有用). 这篇文章总结了如何创建自己的兼容JavaEE的登录模块,以对部署在JBoss AS上的Web应用程序 ...
- 【2016年第6期】数据产品在线定制平台的探索实践
张峰1,孙宗哲2,OCHORA Dennis Reagan2,刘建楠3,宋杰2 1. 国家海洋信息中心,天津 300171: 2. 东北大学软件学院,辽宁 沈阳 110819: 3 ...
- uwp 获取listviewitem里的控件_[UWP]占领标题栏
1. 前言 每一个有理想的UWP应用都会打标题栏的主意,尤其当微软提供 将 Acrylic 扩展到标题栏 这个功能后,大部分Windows 10的原生应用都不乖了,纷纷占领了标题栏的一亩三分地.这篇博 ...
最新文章
- Linux中断流程分析
- Nature | 人类胎盘应该真的是无菌的
- php数据库额外属性,PHP神秘的额外数据库插入
- 【GAN优化】详解对偶与WGAN
- Oracle 绑定变量 详解 .
- matlab第二次上机作业答案,第二次上机作业
- Why close date in S2 view is not displayed correctly after clicking it
- mplayer安装记录 源码分析
- 【Mac】Mac 下安装MySQL优化工具mysqltuner执行报错 [!!] Attempted to use login credentials
- 什么是5G?居然有人用漫画把它讲得如此接地气!
- Php超出高度隐藏,html字符超出指定高度后省略显示_html/css_WEB-ITnose
- VARCHART XGantt_v5.1用户手册:如何提供数据(.NET版)
- linux下anjuta_Linux下搭建C/C++集成开发环境---Anjuta
- 基于Opencv的开源的中文车牌识别系统
- CodeForces 596 B Wilbur and Array
- Safari(苹果)浏览器和IE浏览器修改UserAgent方法
- 通用搜索引擎和垂直搜索引擎的区别
- Oracle收款核销了怎么撤销,21应收收款-核销取消或核销调整
- windows10神州网信政府版开启麦克风、相机
- Oracle 修改字符集(AL32UTF8 转换成UTF8字符集)