之前的一版存在bug。如果将鼠标放移动到界面内某个可点击的widget上(如:QPushButton)上,按住鼠标左键不放,界面可能会出现界面非预期移动的问题。

那是因为当鼠标移动到可点击的widget(如:QPushButton)上时,mousePressEvent这个信号被可点击的widget拦截了,所以包含这个widget的界面的mousePressEvent(QMouseEvent *event)不会被触发。

所以m_last_mouse_position记录的还是上次鼠标点击左键时的位置。去qt论坛咨询了一下官方人员,作了一下修改。具体代码如下。

 #ifndef CUSTOMIZE_QWIDGET_H
#define CUSTOMIZE_QWIDGET_H
#include <QDialog>
#include <QMouseEvent> class CustomizeQWidget : public QDialog
{
Q_OBJECT
public:
explicit CustomizeQWidget(QWidget *parent = );
~CustomizeQWidget();
public slots:
void on_button_close_clicked();
//void on_button_minimize_cliked();
private:
void paintEvent(QPaintEvent *);
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event); private:
QPoint m_last_mouse_position; bool m_move_widget_flag;
};
#endif // CUSTOMIZE_QWIDGET_H
 #include "customize_ui/customize_qwidget.h"
#include <QStyleOption>
#include <QPainter>
#include <QBrush> CustomizeQWidget::CustomizeQWidget(QWidget *parent):
QDialog(parent),
m_move_widget_flag(false)
{
this->setWindowFlags(windowFlags() | Qt::FramelessWindowHint | Qt::Dialog);
} CustomizeQWidget::~CustomizeQWidget()
{
} void CustomizeQWidget::paintEvent(QPaintEvent *)
{
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
} void CustomizeQWidget::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton)
{
m_last_mouse_position = event->globalPos();
m_move_widget_flag = true;
}
} void CustomizeQWidget::mouseMoveEvent(QMouseEvent *event)
{
if (!event->buttons().testFlag(Qt::LeftButton) || !m_move_widget_flag)
return;
const QPoint position = pos() + event->globalPos() - m_last_mouse_position; //the position of mainfrmae + (current_mouse_position - last_mouse_position)
move(position.x(), position.y());
m_last_mouse_position = event->globalPos();
} void CustomizeQWidget::mouseReleaseEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton)
{
m_move_widget_flag = false;
}
}
void CustomizeQWidget::on_button_close_clicked()
{
this->close();
}
												

qt 界面去掉系统边框2.0版的更多相关文章

  1. qt 界面去掉系统边框

    该代码在Qt5框架编辑,使用该类时, 直接继承这个类就可以了. 实现了拖拽功能和关闭功能,如果需要放大缩小功能, 需自己实现. 1 #ifndef CUSTOMIZE_QWIDGET_H #defin ...

  2. 用java实现一个ATM机系统(2.0版)

    用java实现一个ATM机系统(2.0版) java实现银行ATM自助取款机,实现功能:用户登录.余额查询.存钱.取钱.转账.修改密码.退出系统. 文章目录 用java实现一个ATM机系统(2.0版) ...

  3. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版新增消息管理

    在V3.0版本的Web(Mvc.WebForm)与WinForm中我们新增了“消息管理”模块.“消息管理”模块是对框架的所有消息进行管理.通过左侧的消息分类可以查看所选分类的所有消息列表.在主界面上我 ...

  4. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版新增查询引擎管理

    欲了解V3.0版本的相关内容可查看下面的链接地址. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版本发布 RDIFramework.NET — 基于.NET的快速信 ...

  5. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版新增系统参数管理

    欲了解V3.0版本的相关内容可查看下面的链接地址. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版本发布 在V3.0版本的Web(Mvc.WebForm)与WinF ...

  6. RDIFramework.NET V2.5(.NET快速信息化系统开发框架) Web版界面样例(可参考)

    RDIFramework.NET V2.5(.NET快速信息化系统开发框架)  Web版介绍 现已升级到V2.8,点击查看 B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起 ...

  7. [Qt] 界面美化 [2013-06-17更新](转载)

    - 经验总结 1. 可用对话框(QDialog)模拟类似Android中toast的效果.     - 设置程序界面风格 在main函数中QApplication::setStyle("wi ...

  8. 基于DDDLite的权限管理OpenAuth.net 1.0版正式发布

    距离上一篇OpenAuth.net的文章已经有5个多月了,在这段时间里项目得到了很多朋友的认可,开源中国上面的Star数接近300,于是坚定了我做下去的信心.最近稍微清闲点,正式推出1.0版,并在阿里 ...

  9. QT的Paint 系统

    下面对于QT的绘制系统做一个简要说明, 这个系统主要由三部分组成,  QPainter, QPaintDevice, QPaintEngine. QPainter 是一个绘制接口类,提供绘制各种面向用 ...

随机推荐

  1. elasticsearch 心得

    1.es 一台机器一般为一个节点.一台机器不设置的情况下是无法创建副本集的,副本集和主本必须不在一个节点下,方便故障转移等 2.es7.x后一个索引后只能创建一个类型,可以通过修改更改 出现这个的原因 ...

  2. CSS3 盒模型---css初始化会用到:box-sizing: border-box 盒子大小为 width 就是说 padding 和 border 是包含到width里面的

    CSS3中可以通过box-sizing 来指定盒模型,即可指定为content-box.border-box,这样我们计算盒子大小的方式就发生了改变. 可以分成两种情况: 1.box-sizing: ...

  3. Python之dict(或对象)与json之间转化

    在Python语言中,json数据与dict字典以及对象之间的转化,是必不可少的操作. 在Python中自带json库.通过import json导入. 在json模块有2个方法, loads():将 ...

  4. JavaScript几种继承方式

    我们先构建一个Person的构造函数 function Person(name) { this.name=name; } Person.prototype.sayHi=function () { co ...

  5. CSS3/CSS之居中解析(水平+垂直居中、水平居中,垂直居中)

    首先,我们来看下垂直居中: (1).如果是单行文本,则可以设置的line-height的数值,让其等于父级元素的高度! <!DOCTYPE html> <html lang=&quo ...

  6. h5本地存储登录页面实现记住密码功能

    <!DOCTYPE html> <html> <head> <title></title> </head> <style ...

  7. HTML学习 day03

    表单 表单   表单:表单域:包含了处理表单数据所用的程序的URL以及数据提交到服务器的方法.     表单控件:(对象.元素):包含了文本框.密码框.隐藏.多行文本框(文本域).复选框.单选框.下拉 ...

  8. cesium-webpack 入门开发系列一初探篇(附源码下载)

    前言 cesium-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 we ...

  9. oracle数据库不小心删除了数据

    1.select * from SYS_DICT as of timestamp to_timestamp('2019-11-05 10:00:00','yyyy-mm-dd hh24:mi:ss') ...

  10. CSS 轻松搞定标签(元素)居中问题

    在CSS里,标签位置居中一直是困扰Web前端的难题.在本文中,我对这类问题进行了探究和给出了几点建议,供读者参考. 1 行内标签 1.1 水平居中 在父级标签中使用 text-align: cente ...