【QT for Android】键盘+鼠标信息获取

32 篇文章 0 订阅
2 篇文章 0 订阅

前言

在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 就行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

傻傻虎虎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值