QT谷歌输入法纯widget方式没有qml


最近看了输入法部分的实现方式,也看了不少文章,qml实现,不太了解,也不想了解,说实话UI界面是我最不想做的事情。每个人审美不同调整的东西太多了,烦,总感觉浪费时间。
纯英文界面做的没意思,加上中文输入法是我一直想做的。

样式

黑漆马虎,哈哈哈
在这里插入图片描述

移植方法

第一种直接带入源码编译

这个无需多讲,直接将所有的工程包含到你所需的工程中去即可,可查看.pro文件涉及哪些文件。

第二种链接方式

1、clone工程到你的本地目录,打开项目
2、动态库的生成:修改项目中.pro文件中TEMPLATE = app改为lib即可生成动态库文件

# 生成库文件
TARGET = virtualkeyboard
TEMPLATE = lib

3、静态库的生成(不会更新之前已生成的动态库文件!):

# 生成库文件
TARGET = virtualkeyboard
TEMPLATE = lib
# 指定生成为静态库
CONFIG += staticlib

4、取出工程中所有.h文件及编译生成的库文件
5、将.h文件加入到你需要用到的工程中,.pro文件中链接此动态库文件即可

项目中.pro文件增加的内容如下:

# 软键盘
include(keyboard/keyboard.pri)

# 软键盘linux
unix:!macx: LIBS += -L$$PWD/keyboard/
unix:!macx: LIBS += -lvirtualkeyboard

# 软键盘windows
win32: LIBS += -L$$PWD/keyboard/
win32: LIBS += -lvirtualkeyboard

5.1、在你的工程中新建keyboard文件夹

5.2、在keyboard文件夹中新建keyboard.pri文件

填入如下内容:

HEADERS += \
    $$PWD/customerqpushbutton.h \
    $$PWD/keyboard.h \
    $$PWD/lib/atomdictbase.h \
    $$PWD/lib/dictbuilder.h \
    $$PWD/lib/dictdef.h \
    $$PWD/lib/dictlist.h \
    $$PWD/lib/dicttrie.h \
    $$PWD/lib/lpicache.h \
    $$PWD/lib/matrixsearch.h \
    $$PWD/lib/mystdlib.h \
    $$PWD/lib/ngram.h \
    $$PWD/lib/pinyinime.h \
    $$PWD/lib/pinyinime_global.h \
    $$PWD/lib/searchutility.h \
    $$PWD/lib/spellingtable.h \
    $$PWD/lib/spellingtrie.h \
    $$PWD/lib/splparser.h \
    $$PWD/lib/sync.h \
    $$PWD/lib/userdict.h \
    $$PWD/lib/utf16char.h \
    $$PWD/lib/utf16reader.h \
    $$PWD/virtualkeyboard.h

5.3、复制customerqpushbutton.h keyboard.h virtualkeyboard.hkeyboard文件夹

5.4、复制编译的动态库文件或者静态库文件到keyboard文件夹

5.5、在keyboard文件夹中新建lib文件夹

将克隆的工程中googlelib文件夹中所有.h后缀的文件复制到此

5.6、修改keyboard.h#include <pinyinime.h>改为 #include <keyboard/lib/pinyinime.h>
5.7、复制data目录下的词典文件到keyboard文件夹内,(在其他目标板上运行,需将词典复制过去,实例化时指定加载路径信息)

6、点击小锤子编译即可

7、如果动态库则上传动态库文件到特定硬件上

修改相关参数

修改输入法界面尺寸大小

  • 打开virtualkeyboard.h文件,文件中定义皆以pixel为单位
    修改其中UI_KEYBOARDWINDOW_WIDTHUI_KEYBOARDWINDOW_HEIGHT宏定义为多少pixel
    修改显示中文结果的间隙大小:水平间隙CHINESESEARCH_BLOCKSTYLE_MULTI_RECT_X_GAP,垂直间隙CHINESESEARCH_BLOCKSTYLE_MULTI_RECT_Y_GAP
    修改每页显示数目:列数目CHINESESEARCH_BLOCKSTYLE_RECT_H_NUM_MAX,行数目CHINESESEARCH_BLOCKSTYLE_RECT_V_NUM_MAX

    其他修改直接看文件中说明

    使用方式

    输入框使用单一QLineEdit控件便于管理

    初始化部分

    1、实例化键盘

    keyboard *pKeyboard = new keyboard(this ,"谷歌词典文件路径" ,"用户词典文件路径");
    

    2、连接键盘输入结束信号

    connect(pKeyboard ,&keyboard::editisModifiedok ,this ,&MainWindow::slotKeyboardReturn);
    

    6、槽函数处理,参数str为输入的内容

    void MainWindow::slotKeyboardReturn(QString &str)
    {
          
          
        /*do something...*/
    }
    

    调用键盘

    /*设置显示键盘*/
    void showKeyboard(QString title = "键入xx的内容:" ,QString str = "2020");
    /*单独设置标题*/
    void set_editTips(QString title = "键入xx的内容:");
    /*单独设置输入框内容*/
    void set_editBox(QString str = "2020");
    /*设置键盘模式*/
    void set_keyboardmode(KEYBOARD_MODE mode);
    

1、调整键盘模式

enum KEYBOARD_MODE
{
    
    
    NUM_ONLY = 0,/**< 数字模式,字母键将不可用*/
    EN_ONLY,/**< 英文模式,数字键将不可用*/
    ANY,/**< 全功能,默认模式*/
};

eg:

pKeyboard->set_keyboardmode(keyboard::NUM_ONLY);

互动

1、主线程的主界面部分管理

private:
    QWidget* pLastCallobj;/**< 保存着上次隐藏的页面,也可不用,但需要调用键盘的页面不隐藏*/
    QLineEdit *pLastCallwidget;/**< 保存上次调用键盘的控件*/

2、主线程建立槽,调用键盘显示

/*连接子界面要求显示键盘的信号*/
connect(parameterui ,&parameter::show_keyboard ,this ,&MainWindow::slotprocessedit);
void MainWindow::slotprocessedit(QWidget *pObject ,QLineEdit *pwidget ,QString title ,QString edittext)
{
    
    
    pLastCallobj = pObject;
    pLastCallwidget = pwidget;
	pKeyboard->showKeyboard(title ,edittext);
}

3、主线程,连接键盘输入完成信号

connect(pKeyboard ,&keyboard::editisModifiedok ,this ,&MainWindow::slotKeyboardReturn);
void MainWindow::slotKeyboardReturn(QString str)
{
    
    
    /*重新显示子级页面*/
    pLastCallobj->show();
    /*将键盘的字符串给编辑框*/
    pLastCallwidget->setText(str);
}

4、主线程子级页面,输入控件被点击处理

QLineEdit控件有以下几个信号:

// returnPressed:聚焦在控件上按下回车键时发出,通常用作不带触摸屏的环境
// selectionChanged:聚焦到时发出一次信号
// 连接信号:
connect(ui->clientiplineEdit ,&QLineEdit::selectionChanged ,this ,&parameter::on_clientip_Pressed);
connect(ui->clientiplineEdit ,&QLineEdit::returnPressed ,this ,&parameter::on_clientip_Pressed);
/*需要注意的是,当控件代码由UI设计器自动生成时,信号与槽的建立应当在UI设计器中完成*/
signals:
    void show_keyboard(QWidget * ,QLineEdit *,QString,QString);
/*在parameter界面,clientip输入框被点击*/
void parameter::on_clientip_Pressed()
{
    
    
    emit show_keyboard(this ,ui->clientip,"输入客户端IP" ,ui->clientip->text());
    this->hide();
}

5、连接信号与槽

connect(parameterui ,&parameter::show_keyboard ,this ,&MainWindow::slotprocessedit);/*parameterui为主界面的子级页面*/

THE END

猜你喜欢

转载自blog.csdn.net/weixin_42892101/article/details/108057414