Qt 软键盘(虚拟键盘)嵌入式使用【含demo链接,不需要积分即可下载】

在使用开发嵌入式产品中,必不可少的就是与用户交互的软键盘,废话不多说,直接上代码

软键盘在Qt工程中已经封装为子工程,可以直接使用,如下
在这里插入图片描述
main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
#ifdef Q_OS_WIN32
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);//高dpi开启
QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);//高分辨率图标
//QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);//缩放不取整(150%缩放不用取整到200%缩放)
#endif
qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));//虚拟键盘

    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

inputnew.h(包含详解)

#ifndef FRMINPUTNEW_H
#define FRMINPUTNEW_H

#include <QtGui>
#include <QtSql>
#if (QT_VERSION > QT_VERSION_CHECK(5,0,0))
    #include <QtWidgets>
#endif

namespace Ui
{
    class frmInputNew;
}

class frmInputNew : public QWidget
{
    Q_OBJECT

public:
    //单例模式,保证一个程序只存在一个输入法实例对象
    static frmInputNew *Instance();
    explicit frmInputNew(QWidget *parent = 0);
    ~frmInputNew();

protected:
    //鼠标拖动事件
    void mouseMoveEvent(QMouseEvent *);
    //鼠标按下事件
    void mousePressEvent(QMouseEvent *);
    //鼠标松开事件
    void mouseReleaseEvent(QMouseEvent *);

    //事件过滤器,处理鼠标在汉字标签处单击操作
    bool eventFilter(QObject *obj, QEvent *event);

private:
    Ui::frmInputNew *ui;
    static frmInputNew *self;

    //窗体宽度
    int frmWidth;
    //窗体高度
    int frmHeight;
    //桌面宽度
    int deskWidth;
    //桌面高度
    int deskHeight;

    //数据库路径
    QString dbPath;

    //鼠标拖动自定义标题栏时的坐标
    QPoint mousePoint;
    //鼠标是否按下
    bool mousePressed;
    //当前大小写状态
    bool upper;

    //是否长按退格键
    bool isPress;
    //长按按钮
    QPushButton *btnPress;
    //退格键定时器
    QTimer *timerPress;

    //当前焦点的对象
    QWidget *currentWidget;
    //当前焦点的单行文本框
    QLineEdit *currentLineEdit;
    //当前焦点的多行文本框
    QTextEdit *currentTextEdit;
    //当前焦点的富文本框
    QPlainTextEdit *currentPlain;
    //当前焦点的文本浏览框
    QTextBrowser *currentBrowser;
    //当前焦点控件的类型
    QString currentEditType;

    //显示当前中英文状态
    QLabel *labStatus;
    //是否迷你模式
    bool mini;

    //当前输入法面板位置类型
    QString position;
    //当前输入法类型
    QString inputType;

    //汉字标签数组
    QList<QLabel *>labCh;
    //所有拼音链表
    QStringList allPY;
    //当前拼音链表
    QStringList currentPY;
    //当前拼音索引
    int currentPYIndex;
    //当前拼音数量
    int currentPYCount;

private slots:
    //初始化属性
    void initProperty();
    //初始化窗体数据
    void initForm();
    //初始化数据库
    void initDb();

    //校验当前长按的按钮
    bool checkPress();
    //定时器处理退格键
    void reClicked();

    //输入法面板按键处理
    void btnClicked();

    //焦点改变事件槽函数处理
    void focusChanged(QWidget *oldWidget, QWidget *nowWidget);

    //查询汉字
    void selectChinese();
    //显示查询到的汉字
    void showChinese();
    //计算当前汉字长度自动隐藏标签
    void checkChinese();

    //插入值到当前焦点控件
    void insertValue(const QString &value);
    //删除当前焦点控件的一个字符
    void deleteValue();

    //设置当前汉字
    void setChinese(int index);
    //清空当前汉字信息
    void clearChinese();

public Q_SLOTS:
    //设置字体名称及大小,包括按钮的字体大小和汉字部分的字体大小
    void setFontInfo(const QString &fontName, int btnFontSize, int labFontSize);
    //设置数据库路径
    void setDbPath(const QString &dbPath);

    //设置窗体尺寸
    void setFrmSize(int frmWidth, int frmHeight);
    //设置图标尺寸
    void setIcoSize(int icoWidth, int icoHeight);

    //设置按钮之间的空隙间隔
    void setSpacing(int spacing);
    //设置顶部汉字区域高度
    void setTopHeight(int topHeight);

    //设置是否启用迷你模式,外接物理键盘时使用
    void setMini(bool mini);

    //设置输入法弹出位置
    void setPosition(const QString &position);

    //设置输入法颜色样式
    void setStyle(const QString &style);
    //改变输入法面板样式
    void setColor(const QString &mainBackgroundColor, const QString &mainTextColor,
                  const QString &btnBackgroundColor, const QString &btnHoveColor,
                  const QString &btnHoveTextColor, const QString &labHoveColor,
                  const QString &labHoveTextColor);

    //设置当前输入法类型
    void setInputType(const QString &inputType);
    //改变字母大小写
    void setUpper(bool isUpper);
    //按钮改变成特殊字符
    void showChar(bool isChar);

    //显示输入法面板
    void showPanel();

};

#endif // FRMINPUTNEW_H

demo结果
在这里插入图片描述
在这里插入图片描述
demo链接:
https://download.youkuaiyun.com/download/weixin_48268336/87842723

要是可以的话求个一件三联噢。关注点赞评论~一起交流
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值