基本输入检测

This commit is contained in:
2026-09-03 17:08:55 +08:00
parent bd1f884187
commit 856baa697e
7 changed files with 531 additions and 48 deletions
+48
View File
@@ -1,6 +1,13 @@
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QDebug>
#include <QWindow>
#include "core/common/Enums.h"
#include "core/input/RawInputDetector.h"
static_assert(static_cast<std::uint16_t>(FancyInput::FipKeys::Enter) == 0x1000);
static_assert(static_cast<std::uint32_t>(FancyInput::FipRawKeys::NumpadEnter) == 0xE01C);
static_assert(static_cast<std::uint16_t>(FancyInput::FIPGamepadButtonflags::Y) == 0x8000);
int main(int argc, char *argv[])
{
@@ -16,5 +23,46 @@ int main(int argc, char *argv[])
Qt::QueuedConnection);
engine.loadFromModule("FancyInputQt", "MainWindow");
FancyInput::RawInputDetector rawInputDetector(&app);
if (!engine.rootObjects().isEmpty()) {
if (auto *window = qobject_cast<QWindow *>(engine.rootObjects().constFirst())) {
rawInputDetector.start(window);
QObject::connect(&rawInputDetector, &FancyInput::RawInputDetector::keyPressed,
[](FancyInput::FipKeys key, FancyInput::FipRawKeys rawKey,
quint16 virtualKey, quint16 scanCode, bool extended,
bool ctrl, bool shift, bool alt, bool win,
bool numLock, bool capsLock, bool scrollLock) {
qInfo().nospace() << "KEY DOWN key=" << static_cast<quint16>(key)
<< " raw=" << static_cast<quint32>(rawKey)
<< " vk=0x" << Qt::hex << virtualKey
<< " scan=0x" << scanCode << Qt::dec
<< " e0=" << extended << " modifiers(ctrl=" << ctrl
<< ",shift=" << shift << ",alt=" << alt << ",win=" << win
<< ") locks(num=" << numLock << ",caps=" << capsLock
<< ",scroll=" << scrollLock << ')';
});
QObject::connect(&rawInputDetector, &FancyInput::RawInputDetector::keyReleased,
[](FancyInput::FipKeys key, FancyInput::FipRawKeys rawKey,
quint16 virtualKey, quint16 scanCode, bool extended,
bool, bool, bool, bool, bool, bool, bool) {
qInfo().nospace() << "KEY UP key=" << static_cast<quint16>(key)
<< " raw=" << static_cast<quint32>(rawKey)
<< " vk=0x" << Qt::hex << virtualKey
<< " scan=0x" << scanCode << Qt::dec
<< " e0=" << extended;
});
QObject::connect(&rawInputDetector, &FancyInput::RawInputDetector::mouseButtonChanged,
[](FancyInput::MouseCodeType button, bool pressed) {
qInfo() << (pressed ? "MOUSE DOWN" : "MOUSE UP")
<< static_cast<int>(button);
});
QObject::connect(&rawInputDetector, &FancyInput::RawInputDetector::mouseWheelMoved,
[](int delta) { qInfo() << "MOUSE WHEEL" << delta; });
QObject::connect(&rawInputDetector, &FancyInput::RawInputDetector::mouseMoved,
[](int deltaX, int deltaY) { qInfo() << "MOUSE MOVE" << deltaX << deltaY; });
qInfo() << "Raw Input detection enabled on the main window.";
}
}
return app.exec();
}