Qt Mac OS X“Grab”,获得焦点,模拟鼠标点击

时间:2013-11-20 15:15:17

标签: c++ macos qt mouse simulate

我在Mac OS X上运行了一个Qt应用程序。预装的应用程序“Grab”出了问题。我的应用程序采用全屏,当它通过Command + Tab从其他应用程序切换时,它上面没有其他窗口。但是“Grab”有例外:如果我启动Grab,进入菜单Capture / Select,Grab的浮动窗口出现,当我使用Command + Tab切换到我的应用程序时,Grab位于我的全屏窗口之上。我在我的应用程序中关注以关闭浮动窗口:

只在paintEvent(QPaintEvent * pEvent)中调用setWindowState(Qt :: WindowActive)一次,这使得我的窗口得到焦点,经过测试,调用了focusInEvent(QFocusEvent * e)。

但Grab仍在那里。我发现鼠标点击我的窗口会关闭Grab的浮动赢,所以当我的胜利稳定时,我试图模拟鼠标点击,使用类似的东西:

QPoint pos( 1, 1 );
QWidget *w = this; //qApp->widgetAt(mapToGlobal(pos));
QMouseEvent *press = new QMouseEvent(QEvent::MouseButtonPress, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
QCoreApplication::postEvent(w, press);
QMouseEvent *release = new QMouseEvent(QEvent::MouseButtonRelease, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
QCoreApplication::postEvent(w, release);

mousePressEvent()和mousePressRelease()是触发器,因此它成功了。但不影响Grab窗口。

在所有topLevelWidgets()上调用show(),raise(),activateWindow()也不起作用。

我的小部件源自QScrollArea, - > QAbstractScrollArea, - > QFrame, - > QWidget的

我的小部件是从一个线程启动的,该线程来自QMainWindow。

所以我的问题是: 1.有没有办法真正模拟鼠标点击,这意味着我可以在屏幕上看到鼠标点击? 2.任何其他方式杀死Grab胜利?

由于

0 个答案:

没有答案