1 自定义窗体类继承自QWidget

2 在构造函数中设置无边框效果

setWindowFlags(Qt::FramelessWindowHint);//无边框   
setAttribute(Qt::WA_TranslucentBackground);//背景透明

3 实现鼠标拖动窗口

无边框窗口没有了标题栏,无法通过鼠标来移动窗口。可行的方法是重写窗口的鼠标按下,移动和释放等事件。

为了模拟类似拖动标题栏来移动窗口,可以规定当鼠标单击在某个特定的区域(例如顶部高度为100的矩形区域)才能移动窗口。

下面是一个无边框背景透明的窗体类的代码:

//头文件:BaseWidget.h
#ifndef BASEWIDGET_H
#define BASEWIDGET_H #include <QWidget>
#include <QMouseEvent> //继承自QWidget的自定义窗口,单击(左右键皆可)窗口并移动鼠标可拖动窗口
class BaseWidget : public QWidget
{
Q_OBJECT
public:
explicit BaseWidget(QWidget *parent = ); //设置鼠标按下可移动窗口的区域,在子窗口中必须设置该区域
void setAreaMovable(const QRect rt); protected:
void mousePressEvent(QMouseEvent *);
void mouseMoveEvent(QMouseEvent *);
void mouseReleaseEvent(QMouseEvent *); private:
QRect m_areaMovable;//可移动窗口的区域,鼠标只有在该区域按下才能移动窗口
bool m_bPressed;//鼠标按下标志(不分左右键)
QPoint m_ptPress;//鼠标按下的初始位置
}; #endif // BASEWIDGET_H
源文件:BaseWidget.cpp
#include "basewidget.h"
#include <QDebug> BaseWidget::BaseWidget(QWidget *parent) :
QWidget(parent)
{
//设置无边框透明
setWindowFlags(Qt::FramelessWindowHint);//无边框
setAttribute(Qt::WA_TranslucentBackground);//背景透明 m_areaMovable = geometry();
m_bPressed = false;
} void BaseWidget::mousePressEvent(QMouseEvent *e)
{
//鼠标左键
if(e->button() == Qt::LeftButton)
{
m_ptPress = e->pos();
qDebug() << pos() << e->pos() << m_ptPress;
m_bPressed = m_areaMovable.contains(m_ptPress);
}
} void BaseWidget::mouseMoveEvent(QMouseEvent *e)
{
if(m_bPressed)
{
qDebug() << pos() << e->pos() << m_ptPress;
move(pos() + e->pos() - m_ptPress);
}
} void BaseWidget::mouseReleaseEvent(QMouseEvent *)
{
m_bPressed = false;
} //设置鼠标按下的区域
void BaseWidget::setAreaMovable(const QRect rt)
{
if(m_areaMovable != rt)
{
m_areaMovable = rt;
}
}

4 模拟“最大化”“最小化”“关闭”按钮

最简单的方式是采用布局,在窗口顶部左侧依次放“最大化”“最小化”“关闭” 3个按钮,实现对应的功能即可,此处就不一一列出。

如果想快速实现无边框的窗体,只需继承BaseWidget 类即可。

Qt中实现无边框的窗体的更多相关文章

  1. WPF中制作无边框窗体

    原文:WPF中制作无边框窗体 众所周知,在WinForm中,如果要制作一个无边框窗体,可以将窗体的FormBorderStyle属性设置为None来完成.如果要制作成异形窗体,则需要使用图片或者使用G ...

  2. 如何在pyqt中给无边框窗口添加DWM环绕阴影

    前言 在之前的博客<如何在pyqt中通过调用SetWindowCompositionAttribute实现Win10亚克力效果>中,我们实现了窗口的亚克力效果,同时也用SetWindowC ...

  3. C# 无边框异型窗体制作

    我是一个C#的初学者 只要涉及到windows窗体编程 都希望窗体的外观比较好看 不是系统默认的那样 对于C# 更改窗体外观感觉并不那么轻松 更改窗体外观涉及到使用GDI+ 我所知道的有两种方法: 有 ...

  4. C#自定义无边框MessageBox窗体

    C#自定义无边框MessageBox窗体 本例子中制作一个无边框的MessageBox窗体 展示效果: 窗体设计 1.添加一个窗体继承原生Form public partial class Messa ...

  5. 如何在pyqt中自定义无边框窗口

    前言 之前写过很多关于无边框窗口并给窗口添加特效的博客,按照时间线罗列如下: 如何在pyqt中实现窗口磨砂效果 如何在pyqt中实现win10亚克力效果 如何在pyqt中通过调用SetWindowCo ...

  6. C# .net WPF无边框移动窗体

    转自 http://download.csdn.net/detail/xiang348352/3095084 WPF无边框移动窗体,先在<Window>里添加 MouseLeftButto ...

  7. WPF无边框移动窗体

    WPF无边框移动窗体,先在<Window>里添加 MouseLeftButtonDown=”Window_MouseLeftButtonDown” 然后导航到事件,在事件里添加 if (e ...

  8. Qt:移动无边框窗体(使用Windows的SendMessage)

    移动无边框窗体的代码网上很多,其原理都是一样的,但是是有问题的,我这里只是对其修正一下 网上的代码仅仅实现了两个事件 void EditDialog::mousePressEvent(QMouseEv ...

  9. 01.WPF中制作无边框窗体

    [引用:]http://blog.csdn.net/johnsuna/article/details/1893319   众所周知,在WinForm中,如果要制作一个无边框窗体,可以将窗体的FormB ...

随机推荐

  1. 【bzoj1150】[CTSC2007]数据备份Backup

    将k对点两两相连,求最小长度 易证得,最优方案中,相连的办公楼一定是取相邻的比取不相邻的要更优 然后就可以用贪心来做这道题了.. 将初始所有的线段放进堆里 每次取最短的线段进行连接,且ans+=a[i ...

  2. 【bug】QUOTA_EXCEEDED_ERR: DOM Exception 22

    iOS的Safari在无痕模式下,sessionStorage操作产生异常,报错QUOTA_EXCEEDED_ERR: DOM Exception 22. html5 localStorage err ...

  3. [Codeforces 639B] Bear and Forgotten Tree 3

    [题目链接] https://codeforces.com/problemset/problem/639/B [算法] 当d > n - 1或h > n - 1时 , 无解 当2h < ...

  4. ZOJ2107 Quoit Design 最近点对

    ZOJ2107 给定10^5个点,求距离最近的点对的距离. O(n^2)的算法是显而易见的. 可以通过分治优化到O(nlogn) 代码很简单 #include<iostream> #inc ...

  5. python datatime日期和时间值模块

    datetime.time():是一个时间类,这个类接受4个参数,分别代表时,分,秒,毫秒.参数的默认值是为0 #!/usr/bin/env python #coding:utf8 import da ...

  6. 利用 BASE64Encoder 对字符串进行加密 BASE64Decoder进行解密

    转自:https://blog.csdn.net/chenyongtu110/article/details/51694323

  7. mac apache虚拟主机配置

    <VirtualHost *:80>     ServerAdmin slin      DocumentRoot "/Users/slin/work/phpStudy/myPh ...

  8. 如何过滤 adb logcat 输出(转载)

    转自:http://www.cnblogs.com/imouto/archive/2012/12/11/filtering-adb-logcat-output.html 简介: 本文介绍如何在 she ...

  9. CSS布局大全

    前几天面试,问我某布局感觉回答不是很OK所以研究了一下各种布局. 一.单列布局 1.普通布局(头部.内容.底部) <div class="container"> < ...

  10. 【Tair】淘宝分布式NOSQL框架:Tair

    Tair是淘宝的一个开源项目,它是一个分布式的key/value结构数据的解决方案. 一.基本组成 作为一个分布式系统,Tair由一个中心控制节点(config server)和一系列的服务节点(da ...