Swi*_*tch 31 mouse qt mouseevent
在我的程序中,我想在鼠标移动时调用mouseMoveEvent(QMouseEvent*event)(即使它在另一个窗口上).
现在,在我的mainwindow.cpp文件中,我有:
void MainWindow::mouseMoveEvent(QMouseEvent* event) {
qDebug() << QString::number(event->pos().x());
qDebug() << QString::number(event->pos().y());
}
Run Code Online (Sandbox Code Playgroud)
但是,当我在程序本身的窗口上单击并拖动鼠标时,似乎只会调用它.我试过打电话
setMouseTracking(true);
Run Code Online (Sandbox Code Playgroud)
在MainWindow的构造函数中,但这似乎没有做任何不同的事情(只有当我按住鼠标按钮时,无论它在何处,都会调用mouseMoveEvent).在全球范围内跟踪鼠标位置的最简单方法是什么?
bay*_*ith 34
您可以在应用程序上使用事件过滤器.
定义并实现bool MainWindow :: eventFilter(QObject*,QEvent*).例如
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::MouseMove)
{
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
statusBar()->showMessage(QString("Mouse move (%1,%2)").arg(mouseEvent->pos().x()).arg(mouseEvent->pos().y()));
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
构造MainWindows时(或其他地方)安装事件过滤器.例如
MainWindow::MainWindow(...)
{
...
qApp->installEventFilter(this);
...
}
Run Code Online (Sandbox Code Playgroud)