【QT for Android】键盘鼠标信息获取
前言
在QT 上创建android 环境,基于Android Studio 进行虚拟机+sdk 等相关配置下载,版本信息如下:
Android for x86 (GCC 4.9, Qt 5.10.1 for Android x86)
SDK Version: 26.1.1, NDK Version: 16.1.4479499
jdk1.8.0_251
键盘输入信息获取
主要是采用KeyEvent::keyPressEvent(QKeyEvent * event)
,对其进行复写,输出event->key()
是int 分别代表不同的键盘信息,具体QT自带如: Qt::Key_Escape、Qt::Key_Return等。当然如果仅仅只是测试,也可以用statusBar()
进行展示,以statusBar()->showMessage(QStringLiteral("")+event->key(),3000);
会直接输出对应信息。关于这部分研究,主要参考了大神Qt 事件系统之三:键盘事件的博文,里面有详细的关于函数的使用。基于对其学习,整理封装类如下,有需要可以基于此基础增加具体逻辑处理:
keyevent.h
#ifndef KEYEVENT_H
#define KEYEVENT_H
#include <QMainWindow>
#include <QKeyEvent>
namespace Ui {
class KeyEvent;
}
class KeyEvent : public QMainWindow
{
Q_OBJECT
public:
explicit KeyEvent(QWidget *parent = 0);
~KeyEvent();
void keyPressEvent(QKeyEvent *);
private:
Ui::KeyEvent *ui;
};
#endif // KEYEVENT_H
keyevent.cpp
#include "keyevent.h"
#include "ui_keyevent.h"
#include <QDebug>
KeyEvent::KeyEvent(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::KeyEvent)
{
ui->setupUi(this);
}
KeyEvent::~KeyEvent()
{
delete ui;
}
void KeyEvent::keyPressEvent(QKeyEvent * event)
{
qDebug() <<"----"<<event->key();
statusBar()->showMessage(QStringLiteral("")+event->key(),3000);
}
至于UI 文件,附带创建就行,里面控件可以根据需要进行添加。
在用模拟机进行测试的时候,如果遇到键盘无法输入的情况,可以在Android Studio 的AVD Manager 中进行设置,设置完成后建议依旧开着Android Studio,否则一关设置就复原了。
鼠标坐标信息获取
主要实现功能:
- 鼠标坐标实时移动信息获取;
- 鼠标点击和释放坐标信息获取。
主要是用到了QMouseEvent库,通过里面的函数mouseMoveEvent(QMouseEvent *e)
来获取实时信息;通过mouseReleaseEvent(QMouseEvent *e)
来获取鼠标释放时信息;通过mouseDoubleClickEvent(QMouseEvent *e)
来获取鼠标点击时信息。e->x()
和 e->y()
来表示坐标的x和y坐标值。由于测试需要,主要也是采用statusBar()
来进行信息显示,由于右下角信息显示不全,加了一个label 控件进行内容显示。参考的资料主要是大神QT事件处理及实例(鼠标事件、键盘事件、事件过滤)的博文。
mouseevent.h
#ifndef MOUSEEVENT_H
#define MOUSEEVENT_H
#include <QMainWindow>
#include <QLabel>
#include <QStatusBar>
#include <QMouseEvent>
namespace Ui {
class MouseEvent;
}
class MouseEvent : public QMainWindow
{
Q_OBJECT
public:
MouseEvent(QWidget *parent = 0);
~MouseEvent();
protected:
void mousePressEvent(QMouseEvent *e);
void mouseMoveEvent(QMouseEvent *e);
void mouseReleaseEvent(QMouseEvent *e);
void mouseDoubleClickEvent(QMouseEvent *e);
private:
Ui::MouseEvent *ui;
};
#endif // MOUSEEVENT_H
mouseevent.cpp
#include "mouseevent.h"
#include "ui_mouseevent.h"
MouseEvent::MouseEvent(QWidget *parent)
: QMainWindow(parent),
ui(new Ui::MouseEvent)
{
ui->setupUi(this);
ui->label_2->adjustSize();
ui->label->setText("");
this->setMouseTracking(true);
resize(400,200);
}
void MouseEvent::mousePressEvent(QMouseEvent *e)
{
QString str="("+QString::number(e->x())+","+QString::number(e->y()) +")";
if(e->button()==Qt::LeftButton)
{
statusBar()->showMessage(QStringLiteral("左键:")+str);
}
else if(e->button()==Qt::RightButton)
{
statusBar()->showMessage(QStringLiteral("右键:")+str);
}
else if(e->button()==Qt::MidButton)
{
statusBar()->showMessage(QStringLiteral("中键:")+str);
}
}
void MouseEvent::mouseMoveEvent(QMouseEvent *e)
{
ui->label->setText("("+QString::number(e->x())+","+QString::number(e->y())+")");
}
void MouseEvent::mouseReleaseEvent(QMouseEvent *e)
{
QString str="("+QString::number(e->x())+","+QString::number(e->y()) +")";
statusBar()->showMessage(QStringLiteral("释放在:")+str,3000);
}
void MouseEvent::mouseDoubleClickEvent(QMouseEvent *e){}
MouseEvent::~MouseEvent()
{
}
UI 也是同时创建,加2个Label 就行