Qt在Mac OSX上,单击桌面

时间:2014-12-22 08:24:46

标签: c++ macos qt

我正在Mac OSX 10上试验Qt。 我想做什么: 将光标移动到特定位置并左键单击桌面项(在本例中为" Apple"桌面左上角的符号。 我已经尝试过QT测试事件:

首先去添加一个" mouseClick"到QTestEventList并模拟它:

list.addMouseClick(Qt::LeftButton, Qt::NoModifier, point);
QWidget* widget = QApplication::desktop();
list.simulate(widget);

这没有用。我也尝试过:

QPoint point(26,11);
QCursor::setPos(point);
list.addMouseClick(Qt::LeftButton, Qt::NoModifier);
QWidget* widget = QApplication::desktop();
list.simulate(widget);

这也行不通。我的最后一次尝试:

list.addMousePress(Qt::LeftButton, Qt::NoModifier);
list.addDelay(1000);
list.addMouseRelease(Qt::LeftButton, Qt::NoModifier);
QWidget* widget = QApplication::desktop();
list.simulate(widget);

- >也没有成功。

来自应用程序的DesktopWidget上使用的QTestEventList是否可能在Mac上完全没有效果?或者我做错了什么......

非常感谢帮助;-)提前致谢!

吕克

1 个答案:

答案 0 :(得分:0)

我从未尝试过使用QTestEventList在Mac上模拟鼠标事件。相反,我使用了Mac Quartz Event Services API

以下代码说明了如何将鼠标移动到某个位置以及如何模拟点击事件:

#include <ApplicationServices/ApplicationServices.h>

// Move the mouse to the position x, y on the screen
int x = 26;
int y = 11;
CGEventRef mouseEv = CGEventCreateMouseEvent(
                    NULL, kCGEventMouseMoved,
                    CGPointMake(x, y),
                    kCGMouseButtonLeft);
CGEventPost(kCGHIDEventTap, mouseEv);
CFRelease(mouseEv);

// Simulate a left mouse click down
CGEventRef mouseEv = CGEventCreateMouseEvent(
                NULL, kCGEventLeftMouseDown,
                getCursorPosition(),
                kCGMouseButtonLeft);
CGEventPost(kCGHIDEventTap, mouseEv);
CFRelease(mouseEv);

// Simulate a left mouse click up
CGEventRef mouseEv = CGEventCreateMouseEvent(
                NULL, kCGEventLeftMouseUp,
                getCursorPosition(),
                kCGMouseButtonLeft);
CGEventPost(kCGHIDEventTap, mouseEv);
CFRelease(mouseEv);