添加OpenCv
This commit is contained in:
@@ -18,6 +18,12 @@ CursorController::CursorController(QObject *parent)
|
||||
m_pos = QGuiApplication::primaryScreen()->geometry().center();
|
||||
else
|
||||
m_pos = QCursor::pos();
|
||||
|
||||
m_holdTimer.setSingleShot(true);
|
||||
connect(&m_holdTimer, &QTimer::timeout, this, [this] {
|
||||
m_isLongPress = true;
|
||||
m_curStep = cfg.step * 2; // 切到长步长
|
||||
});
|
||||
}
|
||||
|
||||
void CursorController::handleKey(int key)
|
||||
@@ -37,11 +43,60 @@ void CursorController::handleKey(int key)
|
||||
move(delta);
|
||||
}
|
||||
|
||||
|
||||
void CursorController::handleKey(int key, bool pressed)
|
||||
{
|
||||
static QSet<int> pressedKeys; // 记录当前按住的键
|
||||
|
||||
switch (key) {
|
||||
case Qt::Key_Up:
|
||||
case Qt::Key_Down:
|
||||
case Qt::Key_Left:
|
||||
case Qt::Key_Right: {
|
||||
QPoint dir;
|
||||
switch (key) {
|
||||
case Qt::Key_Up: dir = QPoint(0, -1); break;
|
||||
case Qt::Key_Down: dir = QPoint(0, 1); break;
|
||||
case Qt::Key_Left: dir = QPoint(-1, 0); break;
|
||||
case Qt::Key_Right: dir = QPoint( 1, 0); break;
|
||||
}
|
||||
|
||||
if (pressed) {
|
||||
/* ---------- 键按下(含自动重复) ---------- */
|
||||
if (!pressedKeys.contains(key)) {
|
||||
// 第一次按下
|
||||
pressedKeys.insert(key);
|
||||
m_isLongPress = false;
|
||||
m_curStep = cfg.step; // 短按步长
|
||||
m_holdTimer.start(100); // 1 秒后切成长按
|
||||
}
|
||||
|
||||
/* 每次按下(含自动重复)都移动 */
|
||||
int step = m_isLongPress ? cfg.step * 2 : cfg.step;
|
||||
move(dir * step);
|
||||
} else {
|
||||
/* ---------- 键释放 ---------- */
|
||||
pressedKeys.remove(key);
|
||||
m_holdTimer.stop();
|
||||
m_isLongPress = false;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
case Qt::Key_Return:
|
||||
case Qt::Key_Space:
|
||||
if (pressed && cfg.emulate) emulateClick();
|
||||
return;
|
||||
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
void CursorController::move(const QPoint &delta)
|
||||
{
|
||||
QRect desk = QGuiApplication::primaryScreen()->geometry();
|
||||
m_pos += delta;
|
||||
|
||||
//m_pos += delta;
|
||||
m_pos += delta * m_curStep; // 用 m_curStep 而不是 cfg.step
|
||||
if (cfg.wrap) {
|
||||
m_pos.setX(((m_pos.x() - desk.left()) % desk.width() + desk.width()) % desk.width() + desk.left());
|
||||
m_pos.setY(((m_pos.y() - desk.top()) % desk.height() + desk.height()) % desk.height() + desk.top());
|
||||
|
||||
Reference in New Issue
Block a user