Qt无边框设计
//指定窗口为无边框
this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinMaxButtonsHint);
重写鼠标事件:
void mousePressEvent(QMouseEvent* event) override;
void mouseMoveEvent(QMouseEvent* event) override;
定义位置:
QPoint diff_pos;//鼠标和窗口的相对位移QPoint window_pos;//绝对位置QPoint mouse_pos;
void QtWidgetsApplication2::mousePressEvent(QMouseEvent * event)
{mouse_pos = event->globalPos();window_pos = this->pos();diff_pos = mouse_pos - window_pos;}void QtWidgetsApplication2::mouseMoveEvent(QMouseEvent * event)
{QPoint pos = event->globalPos();this->move(pos - diff_pos);
}
再创建一个widget作为标题栏,并定义好控件:
#include <QWidget>
#include <QLabel>
#include <QPushButton>class CTitleBar : public QWidget
{Q_OBJECTpublic:CTitleBar(QWidget *parent = nullptr);~CTitleBar();private:void init();private:QLabel* logo;QLabel* title;QPushButton* set;QPushButton* min;QPushButton* max;QPushButton* close;
};
初始化控件:
void CTitleBar::initUI()
{logo = new QLabel(this);title = new QLabel(this);title->setText(u8"标题");title->setFixedWidth(120);set = new QPushButton(this);set->setFixedSize(32, 32);min = new QPushButton(this);min->setFixedSize(32, 32);max = new QPushButton(this);max->setFixedSize(32, 32);close = new QPushButton(this);close->setFixedSize(32, 32);QHBoxLayout* lay = new QHBoxLayout(this);lay->addWidget(logo);lay->addWidget(title);lay->addWidget(set);lay->addWidget(min);lay->addWidget(max);lay->addWidget(close);lay->setContentsMargins(5, 5, 5,5);
}
实现无边窗口的拉伸、改变大小:
重写nativeEvent:
#include <qt_windows.h>
bool nativeEvent(const QByteArray& eventType, void* message, long* result) override;bool QtWidgetsApplication2::nativeEvent(const QByteArray & eventType, void * message, long * result)
{MSG* param = static_cast<MSG*>(message);switch (param->message){case WM_NCHITTEST:{int nX = GET_X_LPARAM(param->lParam) - this->geometry().x();int nY = GET_Y_LPARAM(param->lParam) - this->geometry().y();/*if (childAt(nX, nY) != nullptr)return QWidget::nativeEvent(eventType, message, result);*/if (nX > m_nBorderWidth && nX < this->width() - m_nBorderWidth &&nY > m_nBorderWidth && nY < this->height() - m_nBorderWidth){if (childAt(nX, nY) != nullptr)return QWidget::nativeEvent(eventType, message, result);}if ((nX > 0) && (nX < m_nBorderWidth))*result = HTLEFT;if ((nX > this->width() - m_nBorderWidth) && (nX < this->width()))*result = HTRIGHT;if ((nY > 0) && (nY < m_nBorderWidth))*result = HTTOP;if ((nY > this->height() - m_nBorderWidth) && (nY < this->height()))*result = HTBOTTOM;if ((nX > 0) && (nX < m_nBorderWidth) && (nY > 0)&& (nY < m_nBorderWidth))*result = HTTOPLEFT;if ((nX > this->width() - m_nBorderWidth) && (nX < this->width())&& (nY > 0) && (nY < m_nBorderWidth))*result = HTTOPRIGHT;if ((nX > 0) && (nX < m_nBorderWidth)&& (nY > this->height() - m_nBorderWidth) && (nY < this->height()))*result = HTBOTTOMLEFT;if ((nX > this->width() - m_nBorderWidth) && (nX < this->width())&& (nY > this->height() - m_nBorderWidth) && (nY < this->height()))*result = HTBOTTOMRIGHT;return true;}}return false;
}
启用鼠标悬停事件:
setAttribute(Qt::WA_Hover)
相关文章:
Qt无边框设计
//指定窗口为无边框 this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinMaxButtonsHint);重写鼠标事件: void mousePressEvent(QMouseEvent* event) override; void mouseMoveEvent(QMouseEvent* event) override;定义位置: QPoint dif…...
规则引擎Drools使用,0基础入门规则引擎Drools(二)高级语法
文章目录 系列文章索引五、规则属性1、enabled属性2、dialect属性3、salience属性4、no-loop属性5、activation-group属性6、agenda-group属性7、auto-focus属性8、timer属性9、date-effective属性10、date-expires属性 六、Drools高级语法1、global全局变量2、query查询3、fun…...
C语言二十三弹---求第N项斐波那契数列的值
C语言求第N项斐波那契数列的值 定义:斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21,34,55,89…自然中的斐波那契数列࿰…...
Pickcode:教孩子们编码的新视觉语言
Pickcode 通过视觉课程、聊天机器人、游戏和绘图来教授编程。 Pickcode 是一种新的语言和编辑器,可以直观地指导用户编写代码来制作聊天机器人、动画图画和游戏。Pickcode 旨在让用户在学习更高级的语言之前能够充满信心地开始学习编码。 Pickcode 可视化编程语言…...
乐划锁屏插画大赏热度持续,进一步促进价值内容的创造与传播
锁屏,原本只是为了防止手机在口袋里“误触”而打造的功能,现如今逐渐成为文化传播领域的热门入口。乐划锁屏不断丰富锁屏内容和场景玩法,通过打造“乐划锁屏插画大赏”系列活动为广大内容创作者提供了更多展示自我的机会,丰富平台内容。 从2020年到2023年,乐划锁屏插画大赏已连…...
【ArcGIS Pro微课1000例】0034:矢量数据几何校正案例(Spatial Adjustment)
本案例讲解矢量数据几何校正,根据一个矢量数据去校正另外一个矢量数据。 文章目录 一、加载实验数据二、空间校正三、注意事项一、加载实验数据 在ArcGIS Pro中加载数据效果如下: design:需要校正的数据图层plan+roadcenter:目标图层可以看到,design图层没有在正确的位置…...
2023亚太杯数学建模B题:玻璃温室中的微气候法规,思路模型代码论文
问题B 玻璃温室中的微气候法规 赛题思路:思路获取见文末名片,第一时间更新 温室作物的产量受到各种气候因素的影响,包括温度、湿度和风速[1]。其中,适 宜的温度和风速是植物生长[2]的关键。为了调节玻璃温室内的温度、风速等气…...
Eclipse常用设置-乱码
在用Eclipse进行Java代码开发时,经常会遇到一些问题,记录下来,方便查看。 一、properties文件乱码 常用的配置文件properties里中文的乱码,不利于识别。 处理流程:Window -> Preferences -> General -> Ja…...
MySQL面试,MySQL事务,MySQL锁,MySQL集群,主从,MySQL分区,分表,InnoDB
文章目录 数据库-MySQLMySQL主从、集群模式简单介绍1、主从模式 Replication2、集群模式3、主从模式部署注意事项 UNION 和 UNION ALL 区别分库分表1.垂直拆分2、水平拆分 MySQL有哪些数据类型1、整数类型**,2、实数类型**,3、字符串类型**,4…...
HarmonyOS应用开发者认证题目满分指南
为了帮助大家快速的上手HarmonyOS应用程序开发,官方制作了一些免费的课程:HarmonyOS第一课。每个课程后面都有一些练习题,下面就是这些题目的满分答案。 【习题】运行Hello World工程 判断题 1.DevEco Studio是开发HarmonyOS应用的一站式集…...
openssl+ SM2 + linux 签名校验开发实例(C++)
文章目录 一、SM2校验理论基础二、SM2签名校验开发实例(C) 一、SM2校验理论基础 SM2的校验过程是使用椭圆曲线上的公钥验证签名的有效性。以下是SM2校验的理论基础相关知识点: SM2签名算法: SM2的校验基于椭圆曲线数字签名算法&a…...
有关Vue、微信小程序、UniApp中的CSS中的宽度width单位、自适应
在Vue中,可以使用以下单位来设置宽度(width) 像素(px):最常用的单位,表示一个绝对长度单位。例如,width: 200px; 表示宽度为200像素。百分比(%):…...
黑马React18: ReactRouter
黑马React: ReactRouter Date: November 21, 2023 Sum: React路由基础、路由导航、导航传参、嵌套路由配置 路由快速上手 1. 什么是前端路由 一个路径 path 对应一个组件 component 当我们在浏览器中访问一个 path 的时候,path 对应的组件会在页面中进行渲染 2. …...
算法刷题-动态规划-1
算法刷题-动态规划-1 不同路径不同路径||方法一:方法二 第N个泰波那契数递归写法滚动数组 三步问题递归操作滚动数组 使用最小画法爬楼梯递归 解码方法方法一方法二:(大佬讲解) 不同路径 //机器人不同的路径进入到指定的地点 publ…...
分享一篇很就以前的文档-VMware Vsphere菜鸟篇
PS:由于内容是很久以前做的记录,在整理过程中发现了一些问题,简单修改后分享给大家。首先ESXI节点和win7均运行在VMware Workstation上面,属于是最底层,而新创建的CentOS则是嵌套后创建的操作系统,这点希望…...
QT中的lambda表达式
面是对Qt中在QObject::connect()中的lambda表达式常用用法 QString str("I am a string!"); devicestr; connect(ui- connect(m_imgshowUI, &ImgShow::GetImgPath, m_visionplatform, [](const std::string filename){m_visionplatform->ReadImg(filename);}…...
linux文件I/O:文件锁的概念、函数以及代码实现
文件锁是一种用来保证多个进程对同一个文件的安全访问的机制。文件锁可以分为两种类型:建议性锁和强制性锁。建议性锁是一种协作式的锁,它只有在所有参与的进程都遵守锁的规则时才有效。强制性锁是一种强制式的锁,它由内核或文件系统来强制执…...
MySQL数据库系统教程
目录 基础篇 通用语法及分类 DDL(数据定义语言) 数据库操作 表操作 DML(数据操作语言) 添加数据 更新和删除数据 DQL(数据查询语言) 基础查询 条件查询 聚合查询(聚合函数࿰…...
这样写postman实现参数化,阿里p8都直呼牛逼
什么时候会用到参数化 比如:一个模块要用多组不同数据进行测试 验证业务的正确性 Login模块:正确的用户名,密码 成功;错误的用户名,正确的密码 失败 postman实现参数化 在实际的接口测试中,部分参数…...
【Qt-25】控件篇
一、comboBox控件 1、获取item数量 ui->comboBox_2->count(); 2、根据索引值获取文本 ui->comboBox->itemText(i); 3、调整当前显示文本内容 ui->comboBox->setCurrentIndex(j); 4、添加item ui->comboBox->addItem("");//添加一个内…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
