1、效果

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

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

#ifndef CONTROL_H
#define CONTROL_H
#include <QWidget>namespace Ui {
class Control;
}class Control : public QWidget
{Q_OBJECTpublic:explicit Control(QWidget *parent = 0);~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 1QPalette palette(this->palette());palette.setColor(QPalette::Background, Qt::black);this->setAutoFillBackground(true);this->setPalette(palette);
#endifif(A2X==0 && A2Y==0){return;}this->move(A2X,A2Y);
}void Control::mouseMoveEvent(QMouseEvent *event)
{if (event->buttons() == Qt::LeftButton) // 这个if判断只是为了保证是按压鼠标左键移动产生窗体拖动效果
    {
#if 0curentX = event->x();//鼠标点相对当前widget的位置curentY = event->y();
#endifcurentX = event->globalX();//鼠标点相对整个显示器的位置curentY = event->globalY();A2X = A1X+curentX-pressX;A2Y = A1Y+curentY-pressY;
#if 0qDebug()<< "mouseMoveEvent:" << curentX << curentY;qDebug()<< "A2XY:" << A2X << A2Y;
#endifupdate();}
}void Control::mousePressEvent(QMouseEvent *event)
{pressX = event->globalX();//鼠标点相对整个显示器的位置pressY = event->globalY();A1X = this->x();//widget左上角相对程序的位置A1Y = this->y();
#if 0int 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

转载于:https://www.cnblogs.com/judes/p/11016771.html

Qt坐标系以及自定义可移动控件相关推荐

  1. Qt基于QGraphicsObject自定义图元并实现简单的动画

    文章目录 Qt基于QGraphicsObject自定义图元并实现简单的动画 举例; Qt基于QGraphicsObject自定义图元并实现简单的动画 Qt 图形的绘制 可以是QPainter方法直接绘 ...

  2. 为Qt Designer创建自定义Widgets小部件

    为Qt Designer创建自定义Widgets小部件 为Qt Designer创建自定义Widgets小部件 入门 在注释domXml()功能 插件要求 创建行为良好的小部件 编译和安装插件 一个简 ...

  3. Qt Creator创建自定义效果和材质

    Qt Creator创建自定义效果和材质 创建自定义效果和材质 创建自定义效果 创建自定义材料 创建着色器文件 创建自定义效果和材质 " Qt Quick 3D效果"和" ...

  4. Qt Creator使用自定义着色器

    Qt Creator使用自定义着色器 使用自定义着色器 可用的自定义着色器实用程序 可用的自定义着色器命令 使用自定义着色器 您可以使用Qt Quick 3D着色器实用程序和命令来创建自己的效果和材质 ...

  5. Qt Creator使用自定义字体

    Qt Creator使用自定义字体 使用自定义字体 使用自定义字体 为了使UI在设备上预览时使用自定义字体,必须将字体导入项目文件夹.Qt Design Studio会将它们与您的UI一起部署到设备上 ...

  6. 【QT 5 设置自定义标题栏+学习:《QT实现鼠标拖动调整窗口大小》+基础样例】

    [QT 5 设置自定义标题栏+学习:<QT实现鼠标拖动调整窗口大小>+基础样例] 1.说明 2.实验环境 3.实验目的 4.参考文章 5.实验步骤 (1)下载代码,运行没有错误. (2)加 ...

  7. 05黑马QT笔记之自定义槽函数

    05黑马QT笔记之自定义槽函数 1 自定义槽函数其实不难,没什么好说的,注意以下几点便可. 自定义参函数注意事项(Qt5): * 1)自定义槽函数可以是类成员函数(用得最多).全局普通函数.静态函数. ...

  8. Qt在win10自定义标题栏,应用主题颜色到标题栏

    Qt在win10自定义标题栏,应用主题颜色到标题栏 前言 先看效果 关键点 QtWin 注册表获取是否应用了颜色到标题栏 代码 头文件:captionwidget.h 源文件:captionwidge ...

  9. qt designer使用自定义ui控件

    文章目录 qt designer使用自定义ui控件 使用须知 插件应该存放的位置 Qt creator内置的designer 独立的designer 构建一个可使用的插件 Qt creator内置的d ...

最新文章

  1. python【力扣LeetCode算法题库】46- 全排列
  2. Aooms_基于SpringCloud的微服务基础开发平台实战_002_工程构建
  3. [Xcode 实际操作]六、媒体与动画-(6)使用UIBlurEffect给图片添加模糊效果
  4. bin文件怎么转换成文本文档_Python脚本4:根据txt文本,批量创建文件夹
  5. 缓存,确实很香,却也很受伤!
  6. JVM快速调优手册v1.0
  7. android如何用代码实现界面ui
  8. AutoCAD VBA创建椭圆和样条曲线
  9. Hadoop入门之命令参考
  10. 中国银行 网银 控件造成 IE8 崩溃的解决办法
  11. linux终端清除命令,ubuntu清除命令行记录
  12. uoj132/BZOJ4200/洛谷P2304 [Noi2015]小园丁与老司机 【dp + 带上下界网络流】
  13. [iOS开发]Instruments工具的学习
  14. c语言转义字符 pdf,C语言教程讲义 pdf版
  15. mysql informix_INFORMIX数据库函数
  16. 《数学之美》-吴军 读书笔记
  17. 【前端】HTML标签(下)
  18. 如何让电脑同时连接内外网?
  19. 微信公众号里放XLS链接教程
  20. javaweb登录验证码的实现

热门文章

  1. MySQL的MyISAM和InnoDB存储引擎表结构
  2. 每天一道LeetCode-----根据先序遍历和中序遍历还原二叉树
  3. 除自身以外数组的乘积—leetcode238
  4. 十分钟读懂『卡尔曼滤波算法』
  5. new与malloc的区别以及实现方法
  6. 牛客小白月赛2-B小马过河(求点到直线的垂足)
  7. 希尔排序(C++版)
  8. c语言现代方法16章 基础、课后习题、基础等
  9. Linux添加用户(user)到用户组(group)
  10. one thread one loop 思想