Qt坐标系以及自定义可移动控件
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
Qt坐标系以及自定义可移动控件的更多相关文章
- Qt:使用自定义的字体
Qt:使用自定义的字体 1. 下载字体文件 2. 加载字体文件 3. 使用字体 QFontDatabase::addApplicationFont("XENOTRON.TTF" ...
- Qt信号之自定义数据类型
[1]为什么需要自定义数据类型? 内置类型毕竟很有局限性,否则为什么还需要类呢.总之,有时候,我们多么希望信号能发送自定义数据类型. 幸哉~ Qt是支持自定义信号,且自定义信号可以发送自定义数据类型的 ...
- Qt之创建自定义类型
摘要: 简述 当使用Qt创建用户界面时,特别是那些带有特殊控制和特征的界面时,开发者通常需要创建新数据类型来扩展或替换Qt现有的的值类型集合. 标准类型,比如:QSize.QColor和QString ...
- Qt之如何自定义model
Qt之如何自定义model https://blog.csdn.net/wei375653972/article/details/86592209
- QT使用提升自定义组件
QT使用提升自定义组件 QTC++QT自定义 QT 组件提升来实现自定义功能 介绍 我们在使用QT设置界面之后,往往需要自己实现一些方法,如果是单独 的还好,但是如果遇到很多同类型的都有需求, 比如 ...
- QT笔记之自定义窗口拖拽移动
1.QT自定义标题栏,拖拽标题栏移动窗口(只能拖拽标题,其他位置无法拖拽) 方法一: 转载:http://blog.sina.com.cn/s/blog_4ba5b45e0102e83h.html . ...
- Qt之QHeaderView自定义排序(获取正确的QModelIndex)
简述 前几节中分享过关于自定义排序的功能,貌似我们之前的内容已经可以很好地解决排序问题了,但是,会由此引发一些很难发现的问题...比如:获取QModelIndex索引错误. 下面,我们先来实现一个整行 ...
- Qt之QHeaderView自定义排序(终极版)
简述 本节主要解决自定义排序衍生的第二个问题-将整形显示为字符串,而排序依然正常. 下面我们介绍三种方案: 委托绘制 用户数据 辅助列 很多人也许会有疑虑,平时都用delegate来绘制各种按钮.图标 ...
- Qt之QHeaderView自定义排序(QSortFilterProxyModel)
简述 对以上节的排序,我们衍伸了两点: 把一个字符串前面的数据按照字符串比较,而后面的数据按照整形比较. 将整形显示为字符串,而排序依然正常呢. 为了分别描述,这里我们先解决问题1. 简述 效果 处理 ...
随机推荐
- Codeforces Round #524 (Div. 2) Masha and two friends矩形
题目 题意: 给一个n*m块大的黑白相间的矩形,在这个举行中操作,要先把第一个矩形(左下角坐标(x1,y2),右上角坐标(x2,y2)) 全部涂成白色,再把第二个矩形(左下角坐标(x3,y3), ...
- linux网络编程之socket编程(十三)
今天继续学习socket编程,从今天起开始学习UDP,具体内容如下: ①.无连接 UDP协议它内部并没有维护端到端的一些连接状态,这跟TCP是不同的,TCP是基于连接的,而在连接的时候是需要进行三次握 ...
- jquerymobile tap事件被触发两次
首先介绍一下这个问题出现的背景:我在写网站时想要一套代码兼容手机端和pc端,所以用了jquery和jquery mobile,点击事件用的jquerymobile tap事件,但是在移动端测试时出现点 ...
- Git---报错:git Please move or remove them before you can merge 解决方案
场景: 当前在本地仓库lucky,因修改了123.txt的文件内容,需要将lucky分支push到远程Git库,在push前有其他的同事已删除了远程Git库中的123.txt文件.因此这时就产生了远程 ...
- javacv开发详解之1:调用本机摄像头视频
前言:javacv开发包是用于支持java多媒体开发的一套开发包,可以适用于本地多媒体(音视频)调用以及音视频,图片等文件后期操作(图片修改,音视频解码剪辑等等功能),这里只使用最简单的本地摄像头调用 ...
- 对url路径中的参数进行加密--Java
需求: 后台对一些比较敏感的参数进行数据加密,然后在传送到前端.当前端跳转到后台时,再由后台对其进行解密. 参考 针对url参数的加密解密算法(java版) 修改:对中间的js页面加密代码改写为jav ...
- 063_显示本机 Linux 系统上所有开放的端口列表
#!/bin/bash#从端口列表中观测有没有没用的端口,有的话可以将该端口对应的服务关闭,防止意外的攻击可能性 ss -nutlp |awk '{print $1,$5}' | awk -F&quo ...
- 强大的捉包工具Fiddler
Fiddler2出现 creation of the root certificate was not successful 错误 http://www.zhaokeli.com/Article/63 ...
- Turn Off Windows Firewall Using PowerShell and CMD
If you want to turn off the Windows Firewall, there are three methods. One is using the GUI which is ...
- Ubuntu14.04 软件安装卸载
----常用软件安装 sudo apt-get install vim-gtk //安装vim软件 sudo apt-get install zip //安装解压软件和解压文件 sudo apt-ge ...