Qt笔记之使用设计器自定义窗口标题栏
1.在窗口显示之前,设置WindowFlags为FramelessWindowHint,以产生一个没有边界的窗口
例如
Widget::Widget(QWidget *parent) :
QWidget(parent, Qt::FramelessWindowHint), //在此设置WindowFlags
ui(new Ui::Widget)
{
ui->setupUi(this);
//setWindowFlags(Qt::FramelessWindowHint); 或在构造函数体中设置
}
2.在设计器中,拖一个Widget到窗口上。为方便描述,我命名此Widget为titleBarWidget
将titleBarWidget的minimumSize->height改为30,以固定标题栏高度
更改titleBarWidget的样式表为background-color: #12B7F5;
再拖一个Vertical Spacer到窗口上,并设置窗口为竖直布局
为去除标题栏边距,将layoutLeftMargin、layoutTopMargin和layoutRightMargin都设置为0
效果如图

3.为了能拖动标题栏移动窗口,我们定义一个类,如下
TitleBarWidget.h
#ifndef TITLEBARWIDGET_H
#define TITLEBARWIDGET_H #include <QWidget> class TitleBarWidget : public QWidget
{
Q_OBJECT
public:
explicit TitleBarWidget(QWidget *parent = nullptr);
protected:
virtual void mousePressEvent(QMouseEvent *event);
virtual void mouseMoveEvent(QMouseEvent *event);
private:
int differenceX, differenceY;
}; #endif // TITLEBARWIDGET_H
TitleBarWidget.cpp
#include "TitleBarWidget.h"
#include <QMouseEvent> TitleBarWidget::TitleBarWidget(QWidget *parent) : QWidget(parent) { } void TitleBarWidget::mousePressEvent(QMouseEvent *event)
{
QWidget *parentWidget = static_cast<QWidget *>(parent());
differenceX = event->globalX() - parentWidget->x();
differenceY = event->globalY() - parentWidget->y();
} void TitleBarWidget::mouseMoveEvent(QMouseEvent *event)
{
int x = event->globalX() - differenceX;
int y = event->globalY() - differenceY;
QWidget *parentWidget = static_cast<QWidget *>(parent());
parentWidget->move(x, y);
}
将titleBarWidget提升为TitleBarWidget,就能实现拖动标题栏移动窗口了
4.然而问题来了,titleBarWidget的样式表失效了
为解决这个问题,需要重写QWidget中的paintEvent,代码如下
void TitleBarWidget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event)
QStyleOption option;
option.init(this);
QStylePainter painter(this);
painter.drawPrimitive(QStyle::PE_Widget, option);
}
Qt笔记之使用设计器自定义窗口标题栏的更多相关文章
- Qt编写自定义控件属性设计器
以前做.NET开发中,.NET直接就集成了属性设计器,VS不愧是宇宙第一IDE,你能够想到的都给你封装好了,用起来不要太爽!因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用场景需 ...
- WPF 使用 WindowChrome,在自定义窗口标题栏的同时最大程度保留原生窗口样式(类似 UWP/Chrome)
WPF 自定义窗口样式有多种方式,不过基本核心实现都是在修改 Win32 窗口样式.然而,Windows 上的应用就应该有 Windows 应用的样子嘛,在保证自定义的同时也能与其他窗口样式保持一致当 ...
- Qt 之 自定义窗口标题栏(非常完善)
http://blog.csdn.net/goforwardtostep/article/details/53494800
- JavaFX(二)自定义窗口标题栏
1.问题场景 PC客户端登录界面仿QQ,上边显示图片,下边显示输入框和登录按钮.而JavaFX默认的窗口,不满足需求. 2.解决思路 隐藏窗口默认的标题栏,使用创建label对象,使用css将按钮图片 ...
- WPF 自定义窗口标题栏
1.建一个WPF资源词典,在其中定义窗口样式,并在App.xaml中指定其为程序资源 2.写一个继续自windows的类,并指定这个类的Style为第一步资源里的样式 3.新建窗口时,分别把xaml文 ...
- JavaFX 之自定义窗口标题栏(二)
一.问题场景 PC客户端登录界面仿QQ,上边显示图片,下边显示输入框和登录按钮.而JavaFX默认的窗口,不满足需求. 二.解决思路 隐藏窗口默认的标题栏,使用创建label对象,使用css将按钮图片 ...
- [Qt5] 使用Qt设计器绘制主窗口
实践代码: git clone https://github.com/dilexliu/learn_qt5.git Step1: Qt设计器绘制窗口 保存会得到一个文件: mainwindow.ui ...
- WPF编程,使用WindowChrome实现自定义窗口功能的一种方法。
原文:WPF编程,使用WindowChrome实现自定义窗口功能的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/arti ...
- QT笔记之自定义窗口拖拽移动
1.QT自定义标题栏,拖拽标题栏移动窗口(只能拖拽标题,其他位置无法拖拽) 方法一: 转载:http://blog.sina.com.cn/s/blog_4ba5b45e0102e83h.html . ...
随机推荐
- dedecms--将静态页面转化为动态页面
最近在用dedecms二次开发项目,需要对文章内容页设置权限,会员未登录不允许查看,这个需要先在后台设置将静态页面转化为动态页面 具体步骤: 1:将主页设置为动态浏览 2:进入后台→系统→SQL命令行 ...
- nVidia的物理系统
PhysX PhysX(wiki en 中文,physx wiki physx wiki2)是nVidia公司一款跨平台实时物理引擎,可使用硬件(GPU.PPU: Physics Process ...
- iOS应用内跳转百度高德苹果地图
移动开发经常用到基于位置的一些导航功能,但是对于对导航功能依赖性不强的的应用,我们直接采用应用外跳转地图APP即可. 但是应用间跳转,首先需要设置白名单, 在iOS 9 下涉及到平台客户端跳转,系统会 ...
- pdf转word工具
pdf转word工具及安装:http://blog.sina.com.cn/s/blog_6172011c0102vxir.html pdf去加密:http://www.downxia.com/dow ...
- Xamarin XAML语言教程对象元素的声明方式
Xamarin XAML语言教程对象元素的声明方式 XAML的对象元素的声明有两种形式,分别为包含属性的特性语法形式以及对象元素语法形式.在1.4小节中,我们看到了其中一种对XAML对象元素的声明方式 ...
- 缓存区溢出检测工具BED
缓存区溢出检测工具BED 缓存区溢出(Buffer Overflow)是一类常见的漏洞,广泛存在于各种操作系统和软件中.利用缓存区溢出漏洞进行攻击,会导致程序运行失败.系统崩溃.渗透测试人员利用这 ...
- logging模块详解以及常见代码
1.在django中获取客户端IP地址: if 'HTTP_X_FORWARDED_FOR' in request.META: ip = request.META['HTTP_X_FORWARDED_ ...
- 1004 Counting Leaves
A family hierarchy is usually presented by a pedigree tree. Your job is to count those family member ...
- Ubuntu 16.04安装MongoDB的GUI工具RoboMongo
一.下载: https://robomongo.org/download 离线版本:(链接: https://pan.baidu.com/s/1mirFi56 密码: y3t2) 二.安装: -lin ...
- iOS --SKView类
SKView类 继承自 UIView:UIResponder:NSObject 符合 NSCoding(UIView)UIAppearance(UIView)UIAppearanceContainer ...