一、開發環境
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的...