QT实现完美无边框窗口(可拖动,可调整大小)
效果如下:
只需定义 nativeEvent 事件即可完成这样的功能 ,但要注意的是,这是通过Windows api实现的。
样例如下:(注意头文件)
framelesswidget.h
#ifndef FRAMELESSWIDGET_H
#define FRAMELESSWIDGET_H#include <QWidget>
#include <windows.h> //注意头文件
#include <windowsx.h>
#include <QMouseEvent>
class FramelessWidget : public QWidget
{Q_OBJECTpublic:FramelessWidget(QWidget *parent = 0);~FramelessWidget();
protected:bool nativeEvent(const QByteArray &eventType, void *message, long *result);void mousePressEvent(QMouseEvent *e);void mouseMoveEvent(QMouseEvent *e);
private:int boundaryWidth;QPoint clickPos;
};#endif // FRAMELESSWIDGET_H
framelesswidget.cpp
#include "framelesswidget.h"FramelessWidget::FramelessWidget(QWidget *parent): QWidget(parent)
{boundaryWidth=4; //设置触发resize的宽度this->setWindowFlags(Qt::FramelessWindowHint); //设置为无边框窗口this->setMinimumSize(45,45); //设置最小尺寸this->setStyleSheet("background:#D1EEEE"); //设置背景颜色
}
FramelessWidget::~FramelessWidget()
{}bool FramelessWidget::nativeEvent(const QByteArray &eventType, void *message, long *result)
{MSG* msg = (MSG*)message; switch(msg->message){case WM_NCHITTEST:int xPos = GET_X_LPARAM(msg->lParam) - this->frameGeometry().x();int yPos = GET_Y_LPARAM(msg->lParam) - this->frameGeometry().y();if(xPos < boundaryWidth && yPos<boundaryWidth) //左上角*result = HTTOPLEFT;else if(xPos>=width()-boundaryWidth&&yPos<boundaryWidth) //右上角*result = HTTOPRIGHT;else if(xPos<boundaryWidth&&yPos>=height()-boundaryWidth) //左下角*result = HTBOTTOMLEFT;else if(xPos>=width()-boundaryWidth&&yPos>=height()-boundaryWidth)//右下角*result = HTBOTTOMRIGHT;else if(xPos < boundaryWidth) //左边*result = HTLEFT;else if(xPos>=width()-boundaryWidth) //右边*result = HTRIGHT;else if(yPos<boundaryWidth) //上边*result = HTTOP;else if(yPos>=height()-boundaryWidth) //下边*result = HTBOTTOM;else //其他部分不做处理,返回false,留给其他事件处理器处理return false;return true;}return false; //此处返回false,留给其他事件处理器处理
}void FramelessWidget::mousePressEvent(QMouseEvent *e)
{if(e->button()==Qt::LeftButton)clickPos=e->pos();
}
void FramelessWidget::mouseMoveEvent(QMouseEvent *e)
{if(e->buttons()&Qt::LeftButton)move(e->pos()+pos()-clickPos);
}
main.cpp
#include "framelesswidget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);FramelessWidget w;w.show();return a.exec();
}
QT实现完美无边框窗口(可拖动,可调整大小)相关推荐
- 【C++·Qt】Qt透明无边框窗口以及拖动
窗口透明 1.窗口整体透明(包含其子空控件) //窗口以及子控件都透明 //setAttribute(Qt::WA_WState_WindowOpacitySet); //网上说直接设置不起作用,需 ...
- 【QT】自定义无边框窗口分享
[QT/天下wu双]自定义无边框窗口分享 https://www.bilibili.com/video/BV1HA411Y7d4 源码链接:https://github.com/Bili-TianX/ ...
- 最简单的方式实现QML无边框窗口边缘拖动调整大小
前言 使用Qt在开发桌面程序时,通常会去除默认的程序边框,从而实现自定义的标题栏.然而当设置窗口属性为Qt.FramelessWindowHint后,窗口的拖动,以及在边缘拖动缩放的功能就没有了,在以 ...
- QT实现可移动和改变尺寸的无边框窗口
2019独角兽企业重金招聘Python工程师标准>>> 实现QT无边框窗口的拖动,尺寸改变.需要的时候从该类继承,派生类需要定义为QWidget. 头文件: #ifndef SIZE ...
- Qt Quick无边框窗口
开发环境:Qt Creator 5.6 内容: 使用 Qt Quick创建无边框窗口 Qt Quick是一个无比强大.无比方便快捷的跨平台的开发框架,并且能通过Qt强大的元对象系统实现qml与c+ ...
- qt禁止拖动_[Qt]QMdiArea,无框架窗口的拖动
0:QMdiArea中添加子窗口后,想固定or调整窗口的大小 需要在addSubWindow()函数调用后返回子窗口的指针,然后再设置子窗口的大小 注意设置imagelabel的大小是没有效果的,im ...
- Electron无边框窗口(最小化、最大化、关闭、拖动)以及动态改变窗口大小
文章目录 一.目标原型 1. 目标 2. 原型设计 3. 原型初步实现 二.无边框窗口 1. 要点 2. 改造 三.可拖拽区 1. 要点 2. 改造 四.最小化.最大化.关闭 1. 要点 2. 改造 ...
- Qt 暗夜黑主题教程(一) 创建带圆角和阴影的无边框窗口
创建项目 创建一个主窗口为 QWidget 类.带 UI样式表的项目.我的项目名叫 NightDark,窗口类名叫 Widget,刚入门的小白可以跟我命名保持一致方便学习,大佬自便.(不对,大佬怎么来 ...
- [乱说]Electron 无边框窗口最大化最小化关闭功能
title: '[乱说]Electron 无边框窗口最大化最小化关闭功能' date: 2017-11-21 21:43:40 tags: Electron 无边框窗口最大化最小化关闭功能 目的 实现 ...
最新文章
- cnpm与npm指定有什么区别?
- eth显卡算力2020最新排行_最新三大主流币IPFS比特币ETH挖矿全网算力动态速递单周报(12.3更新)...
- 系统滚动条实现的NUD控件Unusable版
- Batch Normalization原理及pytorch的nn.BatchNorm2d函数
- JavaScript变量提升
- php运行时输出,在PHP中运行具有实时输出的过程
- 左耳朵耗子:聊聊分布式系统架构
- javashop 发布开源放大镜HiZoom插件
- python win32com 批量加密excel 新增sheet 调整sheet顺序
- android 测试 内存,Android性能测试之内存(二)
- “弹出DVD驱动器错误”解决方法
- 论文中常用的对word页眉页脚的操作
- Brat中文标注工具的使用
- window.btoa与window.atob
- 自制汉字字库,识别汉字(一)(数字篇)
- 工业通讯 | Profinet协议基础知识(三)
- DSPE-PEG-DBCO 磷脂-聚乙二醇-二苯并环辛炔 一种线性杂双官能聚乙二醇化试剂
- GPS研究---GPS 系统的组成
- AI取代会议同传,还需几步?
- 武威世纪计算机英语作文,我的城市武威英语作文
热门文章
- Springboot中属性文件的加载和生效顺序
- python赋值布尔变量_python基础 - 变量、布尔值、运算符、条件及循环语句
- php 正则匹配乱码,php正则匹配utf-8编码的中文汉字
- SQL进行特殊符号的替换
- php date函数季度天数,php 日期_PHP的日期 date 函数
- 没有天赋能做设计吗?看优秀设计师必做的5件成功事...
- 区块链的技术简史与未来前景,从互联网进化角度分析
- 纯净精品:龙行天下技术GHOST XP SP3快速装机VIP特供版 2010年7月B版
- Windows 无法删除文件夹 —— 访问被拒绝 / 因为目录不是空的(转载)
- 造成死机的硬件有哪些?CPU风扇正常的转速是多少?