QT之全平台虛擬軟鍵盤

2021-08-10 04:23:48 字數 2496 閱讀 7506

一、開發環境

pc機:qt5.6.2,xp系統,qt creator4.1

嵌入式硬體平台:tq210核心板,板載s5pv210晶元

嵌入式軟體平台:linux3.10.46核心,uboot移植的是2014.12版本

qt5取消了qinputcontext類後,以前在qt4.8.5上用的軟鍵盤**不能用了,在網上找到了大神劉典武的軟鍵盤核心**,經過修改可以在qt5.6上用了,嵌入式arm平台上也試驗可用。

標頭檔案定義如下:

#ifndef keyboard_h

#define keyboard_h

#include class qstackedwidget;

class qlabel;

class qlineedit;

class qpushbutton;

class qcombobox;

// 按鈕的邊長,鍵盤總長度=14*btn_size,鍵盤總寬度=3*btn_size

#define btn_size 40

class keyboard : public qwidget

;#endif // keyboard_h

標頭檔案中主要是定義了鍵盤的幾個介面:數字、字母、字元介面

還定義的所有的按鈕:數字、字母、字元按鈕

滑鼠相關的操作函式,是為了實現鍵盤介面的拖動

最核心的**是兩個槽函式:focuschanged、slotbtnclicked(),分別是處理焦點和按鈕事件

其中,btn_size是每個按鈕的邊長,在編譯之前可以更改,預設是40

cpp檔案核心**如下:

1、建構函式

keyboard::keyboard(qwidget *parent) :

qwidget(parent)

首先,呼叫了初始化介面布局和私有資料函式,然後獲取顯示裝置的分辯率

2、初始化介面布局函式

void keyboard::initwindow()

首先,設定了鍵盤介面的尺寸,然後具體定義了所有控制項,最後給介面布局。

3、初始化資料函式

void keyboard::initform()

// 繫結全域性改變焦點訊號槽

this, slot(focuschanged(qwidget *, qwidget *)));

}

首先,初始化私有資料,然後把所有按鈕都邦定按鈕處理槽函式,最後繫結全域性焦點改變時的處理函式,這個函式也是撥出鍵盤的核心。

4、焦點處理函式

void keyboard::focuschanged(qwidget *, qwidget *nowwidget)

else

this->move(movepoint);

this->repaint();

this->setvisible(true);

}else}}

首先,判斷當前焦點是否在qlineedit控制項中,然後根據焦點的座標,顯示鍵盤的位置。

5、按鍵處理函式

void keyboard::slotbtnclicked()

else if (currenttype == "max")

else

changetype(currenttype);

}else if (objectname == "delbtn")

。。。。。。

else

// 當前不是中文模式,則單擊按鈕對應text為傳遞引數

if (currenttype != "chinese")}}

}

根據按鍵的objectname區分不同的按鍵,進行相應的處理。

6、主函式呼叫方法

#include "keyboard.h"

int main(int argc, char *argv)

只需填加標頭檔案定義,然後在main函式裡例項化就可以了。

程式是在qt5.6的環境下編寫的,理論上來說,qt4也可以執行,但我沒試驗。在pc機和arm嵌入式開發板都可以完美執行。

此虛擬鍵盤程式只包含兩個檔案,可以非常方便的加入到現有的工程當中。 

程式完整原始碼見附件。

Qt軟鍵盤設計 window鍵盤訊息

特點 利用qevent類實現訊息的傳送,不需要呼叫windowapi 問題,只能在qt程式內部工作,不能跨程式響應,同時需要重寫qkeyevent函式完成最終的結果執行。只適合用於程式內嵌的簡單事件響應。qkeyevent keyeve new qkeyevent qevent keypress,q...

使用JS jQuery編寫虛擬軟鍵盤

注意本文 jquery必須引用jquery 見最後 指令碼庫才能實現效果 示例圖 html 段 css樣式 段 charset utf 8 body container container write keyboard keyboard li keyboard li hover capslock,t...

QT 嵌入式 輸入法 軟鍵盤

設計自己的輸入法需要繼承qwsinputmethod。需要重新實現 virtual void updatehandler int type type值是列舉變數update,focusin,focusout,reset,destroyed 分別對應 擁有焦點的控制項發生變化 例如qlineedit的...