目录

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标题栏的示例相关推荐

  1. python图形代码怎么写_【Python3-API】定制化图像接口示例代码

    Python3-urllib3-API定制化图像接口示例代码 AccessToken获取可以参考:http://ai.baidu.com/forum/topic/show/497663(Python3 ...

  2. python实现表格_Python 自由定制表格的实现示例

    很多开发者说自从有了 Python/Pandas,Excel 都不怎么用了,用它来处理与可视化表格非常快速. 下面我来举几个例子. 1. 删除重复行和空行 我们直接用dict.fromkeys的方法把 ...

  3. python定制订单_Python 自由定制表格的实现示例

    很多开发者说自从有了 Python/Pandas,Excel 都不如何用了,用它来处理与可视化表格非常快速. 下面我来举几个例子. 1. 删除重复行和空行 我们直接用dict.fromkeys的方法把 ...

  4. Qt实战案例(42)——利用Qt实现自定义标题栏功能(自定义最大化、最小化、关闭等功能)

    目录 一.项目介绍(为什么要自自定义标题栏功能) 二.项目基本配置 三.UI界面设计 四.主程序实现 4.1 隐藏边框 4.2 设置最大化(还原),最小化,关闭按钮的样式风格 4.3 关闭按钮的实现 ...

  5. Android—— 定制界面风格

    统一的用户界面是可以使得应用程序更友好.要做到用户界面的统一,我们就必须用到风格(style)和主题(theme).OPhone系统提供了很多系统默认的风格和主题,但是很多情况下,这些不能满足我们的需 ...

  6. linux进程及作业管理实验,Linux 进程及作业管理(示例代码)

    Linux 进程及作业管理 概述: 一.进程的相关概念: 1.相关定义:内核的功用:   进程管理.文件系统.网络功能.内存管理.驱动程序.安全功能等: 通俗的来说进程是运行起来的程序.唯一标识进程的 ...

  7. tensorflow 开始——创建定制化 Estimator(创建自定义评估器)

    参考文章:创建定制化 Estimator 文章目录 创建定制化 Estimator 预制 vs. 定制化 创建功能列 写一个模型函数 定义模型 定义输出层 隐藏层 输出层 实现训练.评估.预测 {#m ...

  8. jboss as7 下载_JBoss AS 7:定制登录模块

    jboss as7 下载 JBoss AS 7很整洁,但是文档仍然很缺乏(错误消息没有那么有用). 这篇文章总结了如何创建自己的兼容JavaEE的登录模块,以对部署在JBoss AS上的Web应用程序 ...

  9. 【2016年第6期】数据产品在线定制平台的探索实践

    张峰1,孙宗哲2,OCHORA Dennis Reagan2,刘建楠3,宋杰2 1.      国家海洋信息中心,天津 300171: 2.      东北大学软件学院,辽宁 沈阳 110819: 3 ...

  10. uwp 获取listviewitem里的控件_[UWP]占领标题栏

    1. 前言 每一个有理想的UWP应用都会打标题栏的主意,尤其当微软提供 将 Acrylic 扩展到标题栏 这个功能后,大部分Windows 10的原生应用都不乖了,纷纷占领了标题栏的一亩三分地.这篇博 ...

最新文章

  1. Linux中断流程分析
  2. Nature | 人类胎盘应该真的是无菌的
  3. php数据库额外属性,PHP神秘的额外数据库插入
  4. 【GAN优化】详解对偶与WGAN
  5. Oracle 绑定变量 详解 .
  6. matlab第二次上机作业答案,第二次上机作业
  7. Why close date in S2 view is not displayed correctly after clicking it
  8. mplayer安装记录 源码分析
  9. 【Mac】Mac 下安装MySQL优化工具mysqltuner执行报错 [!!] Attempted to use login credentials
  10. 什么是5G?居然有人用漫画把它讲得如此接地气!
  11. Php超出高度隐藏,html字符超出指定高度后省略显示_html/css_WEB-ITnose
  12. VARCHART XGantt_v5.1用户手册:如何提供数据(.NET版)
  13. linux下anjuta_Linux下搭建C/C++集成开发环境---Anjuta
  14. 基于Opencv的开源的中文车牌识别系统
  15. CodeForces 596 B Wilbur and Array
  16. Safari(苹果)浏览器和IE浏览器修改UserAgent方法
  17. 通用搜索引擎和垂直搜索引擎的区别
  18. Oracle收款核销了怎么撤销,21应收收款-核销取消或核销调整
  19. windows10神州网信政府版开启麦克风、相机
  20. Oracle 修改字符集(AL32UTF8 转换成UTF8字符集)

热门文章

  1. jsp获取主机地址和主机名
  2. 22071班(8月16日作业)
  3. 思维正好,何不踏歌之“丑数”
  4. ubuntu阿里云盘(小白羊)
  5. 【css】css实现图片或动图边缘模糊化处理(附示例代码)
  6. 豆知识( DNS; HTTP入门;网络协议)
  7. win10系统安装Webloic12C操作方法
  8. Winfrom控件的使用
  9. 而立之年,第一篇博客,
  10. 九度题目1341:艾薇儿的演唱会