QT获取坐标
//获得相对于屏幕的坐标
QPoint sPoint1 = event->globalPos();
qDebug() << "相对于屏幕坐标1:" << "(" << sPoint1.rx() << "," << sPoint1.ry() << ")";
/// 获得相对于屏幕的坐标QPoint sPoint2 = QCursor::pos();
qDebug() << "相对于屏幕坐标2:" << "(" << sPoint2.rx() << "," << sPoint2.ry() << ")";
// 获得相对于窗口的坐标
QPoint windowPoint = this->mapFromGlobal(sPoint2);
qDebug() << "相对于窗口坐标:" << "(" << windowPoint.rx() << "," << windowPoint.ry() << ")";
//获得相对于控件的坐标
QPoint widgetPoint = ui->label->mapFromGlobal(sPoint1);
Debug() << "相对于控件标:" << "(" << widgetPoint.rx() << "," << widgetPoint.ry() << ")";
示例:
.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMessageBox>
#include <QList>
#include <QDebug>
#include <QDropEvent>
#include <QMimeData>
///鼠标事件
#include <QMouseEvent>
#pragma execution_character_set("utf-8")
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
QString m_filePath; //保存文件路径
private slots:
void on_pushButton_clicked();
bool eventFilter(QObject *,QEvent *); //事件过滤器
void mousePressEvent(QMouseEvent *event); //事件过滤器
void mouseMoveEvent(QMouseEvent *event); //事件过滤器
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->label->setStyleSheet("#label{border:2px solid rgb(45,226,42);"
"border-top-left-radius: 5px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 5px;}");
//主界面拖动
setAcceptDrops(true); //必须设置,不然无法接收拖放事件
ui->label->setAcceptDrops(true); //禁用textEdit控件的放下操作
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
}
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
qDebug() << this->geometry().x();
qDebug() << this->geometry().y();
QPoint sPoint2=QCursor::pos();
qDebug()<<"相对于屏幕坐标2:"<<"("<<sPoint2.rx()<<","<<sPoint2.ry()<<")";
QPoint windowPoint=this->mapFromGlobal(sPoint2);
qDebug()<<"相对于窗口坐标:"<<"("<<windowPoint.rx()<<","<<windowPoint.ry()<<")";
return true;
}
void MainWindow::mousePressEvent(QMouseEvent *event)
{
//如果鼠标左键按下
if (event->type() == QEvent::MouseButtonPress) {
//获取鼠标在事件接收者中的位置pos
qDebug() << event->pos();
///获取控件X Y坐标
//textX = ui->labelImage->x();
//textY = ui->labelImage->y();
}
}
//移动过程中
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
qDebug() << this->geometry().x();
qDebug() << this->geometry().y();
QPoint sPoint1=event->globalPos();
qDebug()<<"相对于屏幕坐标1:"<<"("<<sPoint1.rx()<<","<<sPoint1.ry()<<")";
QPoint sPoint2=QCursor::pos();
qDebug()<<"相对于屏幕坐标2:"<<"("<<sPoint2.rx()<<","<<sPoint2.ry()<<")";
QPoint windowPoint=this->mapFromGlobal(sPoint2);
qDebug()<<"相对于窗口坐标:"<<"("<<windowPoint.rx()<<","<<windowPoint.ry()<<")";
QPoint widgetPoint=ui->label->mapFromGlobal(sPoint1);
qDebug()<<"相对于控件坐标:"<<"("<<widgetPoint.rx()<<","<<widgetPoint.ry()<<")";
}
效果:
单击鼠标左键:
左键按下移动:
项目下载地址: