1、效果

黑色这个控件是自定义的,可以在界面拖动

2、新建控件的Qt类,父类是QWidget,带ui的,Control.h

#ifndef CONTROL_H
#define CONTROL_H
#include <QWidget> namespace Ui {
class Control;
} class Control : public QWidget
{
Q_OBJECT public:
explicit Control(QWidget *parent = );
~Control();
int A1X,A1Y;
int A2X,A2Y;
int pressX,pressY;
int curentX,curentY;
protected:
void paintEvent(QPaintEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mousePressEvent(QMouseEvent *event); private:
Ui::Control *ui;
}; #endif // CONTROL_H

3、Control.cpp

#include "control.h"
#include "ui_control.h"
#include <QDebug>
#include <QMouseEvent>
Control::Control(QWidget *parent) :
QWidget(parent),
ui(new Ui::Control)
{
ui->setupUi(this);
A2X = this->pos().x();
A2Y = this->pos().y();
} Control::~Control()
{
delete ui;
} void Control::paintEvent(QPaintEvent *event)
{
#if 1
QPalette palette(this->palette());
palette.setColor(QPalette::Background, Qt::black);
this->setAutoFillBackground(true);
this->setPalette(palette);
#endif
if(A2X== && A2Y==)
{
return;
}
this->move(A2X,A2Y);
} void Control::mouseMoveEvent(QMouseEvent *event)
{
if (event->buttons() == Qt::LeftButton) // 这个if判断只是为了保证是按压鼠标左键移动产生窗体拖动效果
{
#if 0
curentX = event->x();//鼠标点相对当前widget的位置
curentY = event->y();
#endif
curentX = event->globalX();//鼠标点相对整个显示器的位置
curentY = event->globalY();
A2X = A1X+curentX-pressX;
A2Y = A1Y+curentY-pressY;
#if 0
qDebug()<< "mouseMoveEvent:" << curentX << curentY;
qDebug()<< "A2XY:" << A2X << A2Y;
#endif
update();
}
} void Control::mousePressEvent(QMouseEvent *event)
{
pressX = event->globalX();//鼠标点相对整个显示器的位置
pressY = event->globalY();
A1X = this->x();//widget左上角相对程序的位置
A1Y = this->y();
#if 0
int a = event->x();//鼠标点相对当前widget的位置
int b = event->y();
int c = this->geometry().x();//widget左上角相对程序的位置
int d = this->geometry().y();
qDebug()<< "mousePressEvent:" << pressX << pressY;
qDebug()<< "A1XY:" << A1X << A1Y;
qDebug()<< "A1xy:" << A1X << A1Y;
qDebug()<< "ab:" << a << b;
qDebug()<< "cd:" << c << d;
#endif
}

4、在main.ui里拖入widget控件,提升为Control,运行,ok

最新文章

  1. Linux 查看命令源码
  2. MySQL 主从复制与读写分离概念及架构分析
  3. / fluxChatDemo / 系列 ——项目安装坑洼简要
  4. 在SQL2008中使用XML应对不确定结构的参数
  5. 电脑无法登陆ftp
  6. win 7 下Maven环境的搭建
  7. RH033读书笔记(6)-Lab 7 Standard I/O and Pipes
  8. W3Cschool学习笔记——CSS教程
  9. CAS单点登录服务器搭建
  10. Spring mvc之 发邮件(qq.163...)
  11. hive的join
  12. Python学习笔记-Linux下安装Python
  13. Asp.Net Core WebApi 和Asp.Net WebApi上传文件
  14. Upload a file with $.ajax to AWS S3 with a pre-signed url
  15. 【UI测试】--安全性
  16. Alpha 冲刺八
  17. 安装和测试Kafka(转)
  18. Python 安装路径, dist-packages 和 site-packages 区别
  19. Linux--安全加固01
  20. js中 a : function(){}这是什么格式? 代表什么含义?怎样学习这样的格式?

热门文章

  1. Pytohn笔记(31)----第三方包
  2. EntityFramework 两个参数连续(中间有空格)问题
  3. 《The one!》团队作业五:团队项目需求改进与系统设计
  4. Mybatis配置文件中#{ }和${ }的区别
  5. HttpReader
  6. BZOJ1209 最佳包裹 (三维凸包 增量法)
  7. 02_View
  8. 04_Tutorial 4: Authentication &amp; Permissions 认证和权限
  9. sping boot 笔记
  10. SQL动态标签