linux下基於qt軟鍵盤的設計

       Qt軟鍵盤,也就是一大堆toolButton堆積起來的對話框,把邊框隱藏掉就行了。最簡單的鍵盤如圖:

複雜功能軟鍵盤的設計都是基於相同的原理。

        首先是要求點擊編輯框的時候就彈出軟鍵盤,這程序中用到了事件過濾器,主要有安裝事件過濾器和eventFilter(QObject *obj, QEvent *event)函數的實現。在登陸界面中,安裝事件過濾器的代碼如下:

//安裝事件過濾器

    ui->pwdLineEdit->installEventFilter(this);

    ui->usrLineEdit->installEventFilter(this);

安裝過程是在登陸界面的構造函數中實現的。

如果在eventFilter(QObject *obj, QEvent *event)處理了對應事件,就返回true,告訴系統不需要再處理了,否則就返回false。將軟鍵盤編輯框內的內容傳送到登陸界面的編輯框內的槽函數的連接也在此函數中實現,需要注意的是,在連接函數中使用keyboard之前需要先new一個實例,否則會有出現錯誤報告工具的提示框。

       在設計軟鍵盤的時候涉及到QSignalMapper的應用,QSignalMapper可以看做是信號的翻譯和轉換器,可以把按鈕信號(無參數)轉換成帶QString參數(按鈕的名稱)的信號,然後依靠QString類型的參數進行處理操作。主要用到三個步驟:

1.首先建立一個無參數的連接:
connect( button, SIGNAL( clicked() ), signalMapper, SLOT( map() ) );

2.然後我們進行轉換:
signalMapper->setMapping( button, texts[i] );
這裏把信號轉換爲QString參數類型的信號,text[i]的內容就是要要傳遞的參數。

3.最後我們把信號轉發到最終的處理函數handle(信號槽)
connect( signalMapper, SIGNAL( mapped(const QString &) ), this, SLOT(handle(const QString &)) );
handle
的參數就是由QSignalMapper轉換過來的QString類型的參數text[i]的值。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章