qt之获取鼠标在屏幕位置,在程序窗口外部位置

一、前言

本文介绍鼠标位置坐标获取,控制鼠标位置前文有文章写了。

二、环境

qt5.7    win8

三、正文

获取鼠标状态应用到几个函数

1移动mouseMoveEvent
2点击mousePressEvent
3释放mouseReleaseEvent
4双击mouseDoubleClickEvent
5滚轮wheelEvent

下面就通过程序说明一下每个函数怎么使用

//移动
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
    QPoint p_ab = event->globalPos();//整个桌面位置
    QPoint p_re = event->pos();//窗口内位置

    QString str;
    str = QString("%1 , %2").arg(p_ab.x()).arg(p_ab.y());
    ui->lineEdit4_2->setText(str);

    //str = QString("%1 , %2").arg(p_re.x()).arg(p_re.y());
    //ui->lineEdit4_3->setText(str);
}
//点击
void MainWindow::mousePressEvent(QMouseEvent *event)
{
    //获得鼠标的x , y 坐标 event->x  , event->y
    //判断点击的是左键还是右键 event->button()==Qt::LeftButton(Qt::RightButton)
    qDebug()<<event->globalPos();
    qDebug()<<event->globalX();
    qDebug()<<event->globalY();
    ui->lineEdit4_3->setText(QString("%1 , %2").arg(event->globalX()).arg(event->globalY()));
}
//释放
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
    qDebug()<<event->globalX();
    qDebug()<<event->globalY();
    //nowmouseplace(event->globalX(),event->globalY());
}
//双击
void MainWindow::mouseDoubleClickEvent(QMouseEvent *event)
{
    // 如果是鼠标左键按下
    if (event->button() == Qt::LeftButton){
        qDebug() << "left double click";

    }
    else if (event->button() == Qt::RightButton){
        qDebug() << "right double click";

    }
}
//滚轮
void MainWindow::wheelEvent(QWheelEvent *event)
{
    int wheel_val = event->delta();
     //当滚轮远离使用者时
    if (wheel_val > 0){
        qDebug() << "wheel forward: " << wheel_val;
    }
    else{//当滚轮向使用者方向旋转时
        qDebug() << "wheel backward: " << wheel_val;
    }
}

如果想要获取窗口外某一点的鼠标坐标,可以通过在窗口内点击鼠标左键,然后按住左键拖到想要知道坐标的位置,在松开左键,然后就会进入到鼠标释放函数,在处理相应的坐标位置数据即可。

还有一种方式是,先将聚焦在本窗口,然后鼠标移动到想要知道坐标的位置,不点击,然后用一下函数方法,就是通过按键来实现获取位置


void MainWindow::keyPressEvent(QKeyEvent *event)
{
    int keyValue = event->key();
    if (keyValue == Qt::Key_Control)
    {//获取鼠标位置
        qDebug() << "=== press key";
        QPoint pt = QCursor::pos();//获取鼠标的绝对位置
        QString str;
        str = QString("%1 , %2").arg(pt.x()).arg(pt.y());
        ui->lineEdit4_2->setText(str);//显示

       // nowmouseplace(pt.x(),pt.y());
    }
}

四、结语

有了这篇文章和前文,鼠标的操作和获取状态都知道如何使用了。

  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 在使用C++和Qt获取外部程序窗口时,可以通过使用Qt的QWindow类和QGuiApplication类来实现。 首先,需要包含相应的头文件: ```cpp #include <QWindow> #include <QGuiApplication> ``` 然后,在需要获取外部程序窗口的地方,可以使用以下代码: ```cpp QWindow *window = QWindow::fromWinId(hwnd); ``` 其中,hwnd是外部程序窗口的句柄(HWND)。通过调用`QWindow::fromWinId()`函数,并传入hwnd作为参数,可以获取外部程序窗口的QWindow对象。这个QWindow对象可以用于进一步操作窗口,比如获取窗口的标题、尺寸等。 需要注意的是,外部程序窗口的句柄(HWND)可以通过某些操作系统相关的函数获取,比如在Windows下,可以使用`FindWindow()`函数来找到外部程序窗口句柄。 以上是使用C++和Qt获取外部程序窗口的简单示例。根据具体的需求,可能需要结合其他的API和函数来实现更多功能,比如通过外部程序窗口的句柄来进行消息传递等。 ### 回答2: c 通过 Qt 获取外部程序窗口有多种方法。一种常用的方法是使用 QWindow 的 fromWinId() 方法。这个方法需要传入外部程序窗口窗口句柄,可以通过调用操作系统特定的函数,如 FindWindow() 或者 EnumWindows() 来获取。 例如,如果想要获取记事本程序窗口,可以使用以下代码: HWND hwnd = FindWindow(L"Notepad", NULL); if (hwnd != NULL) { QWindow *window = QWindow::fromWinId(reinterpret_cast<WId>(hwnd)); // 对获取到的窗口进行其他操作 } 还有另一种更加直接的方法可以在 Qt获取外部程序窗口,即使用 QtWin::fromHwnd() 函数。这个函数能直接将 HWND 转换为 QWindow。你可以通过常规的函数或者操作系统 API 获取窗口句柄,并将其作为参数传入该函数。以下是一个例子: HWND hwnd = FindWindow(L"Notepad", NULL); if (hwnd != NULL) { QWindow *window = QtWin::fromHwnd(hwnd); // 对获取到的窗口进行其他操作 } 无论使用哪种方法,一旦成功获取外部程序窗口的 QWindow 对象,你就可以使用 Qt 提供的其他功能或者 API 对其进行进一步的操作,例如改变窗口大小、移动窗口、发送消息等。注意,这些操作可能需要管理员权限才能生效。 以上是获取外部程序窗口的一些方法,具体方法的选择取决于实际需求和操作系统平台。希望对你有所帮助! ### 回答3: 在使用Qt获取外部程序窗口时,可以使用`QWindow`类的相关函数来实现。首先,需要使用`QWindow::fromWinId()`函数将外部程序窗口标识符(也称为窗口句柄)转换为`QWindow`对象。接下来,可以使用`QWindow`的其他函数获取窗口的属性或执行操作。 具体的步骤如下: 1. 首先,获取外部程序窗口句柄。可以使用操作系统提供的函数如`FindWindow`或`FindWindowEx`来获取窗口句柄。 2. 将窗口句柄转换为`QWindow`对象。可以使用`QWindow::fromWinId()`函数将窗口句柄转换为`QWindow`对象。该函数接受窗口句柄作为参数,并返回对应的`QWindow`对象。 3. 调用`QWindow`对象的相关函数。一旦获得了外部程序窗口的`QWindow`对象,就可以使用`QWindow`提供的函数来获取窗口的属性或执行操作。例如,可以使用`QWindow::title()`函数获取窗口的标题,使用`QWindow::size()`函数获取窗口的大小等等。 需要注意的是,获取外部程序窗口的能力受操作系统的限制。某些操作系统可能需要在应用程序中设置特殊权限或使用特定的API来获取外部程序窗口。此获取外部程序窗口可能需要确保程序以管理员权限运行。 总结起来,使用Qt获取外部程序窗口可以通过将窗口句柄转换为`QWindow`对象来实现,并通过`QWindow`的相关函数获取窗口的属性或执行操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大桶矿泉水

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值