QWSInputMethod詳解
注意:這個類不僅僅在嵌入式環境下有效
一個輸入法包括了過濾器和可選的圖形界面,用來過濾服務器和客戶端應用程序之間 的輸入事件。
創建自定義的輸入法,需要得自QWSInputMethod類,並使用服務器的setCurrentInputMethod()函數來安裝注冊。
當繼承QWSInputMethod時,你可以重新實現filer()函數來處理物理的和虛擬的鍵盤還有鼠標設備的輸入。
為了到一次輸入法查詢的回復(使用sendQuery()函數發送),你必須重新實現queryResponse()函數,然而如果你想在預編輯文本處理鼠標事件,mouseHandler()
必須重新實現。重新實現updateHandler()函數來處理更新事件包括復位和焦點的變化。UpdateType枚舉描述了各類被輸入法認可的更新事件
QSignalMapper
信號的翻譯和轉換器,它可以把一個無參數的信號翻譯成帶int參數、QString參數、QObject*參數或者QWidget*參數的信號,並將之轉發。
下面來段代碼實現過程
//kk.h
class MainWin:public QWidget
{
Q_OBJECT
public:
MainWIn(QWidget *parent = 0);
private slots:
void doClibked(const QString & btnname);//處理最終信號的槽
private :
QSignalMapper *signalMapper;
}
//kk.cpp
MainWin::MainWIn(QStringList texts,QWidget *parent) : QWidget(parent)
{
QString buttontext = "btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9,btn10";//10個button
QStringList texts=buttontext.split(",");
signalMapper = new QSignalMapper(this);
QGridLayout *gridlayout= new QGridLayout;
for(int i=0;i<texts.size();++i)
{
QPushButton *button = new QPushButton(texts[i]);
connect(button,SIGNAL(clicked()),signalMapper,SLOT(map()));//原始信號傳遞給signalmapper
signalMapper->setMapping(button,texts[i]);//設置signalmapper的轉發規則,轉發為參數為QString類型的信號,並把texts[i]的內容作為實參傳遞。
gridLayout->addWidget(button,i/3,i%3);//好屌的格式
}
connect(signalMapper,SIGNAL(mapped(const QString &)),this,SLOT(doClicked(const QString &)));//將轉發的信號連接到最終的槽函數
setLayout(gridLayout);
}
void MainWin::doClicked(const QString& btnname)
{
QMessageBox::information(this,"Clicked",btnname+"is clicked!");//顯示被按下的btn名稱
}
總結:
1.首先將原始不帶參數的信號連接到signalmapper的map槽函數,這樣signalmapper能在第一時間接收到原始信號。
2.其次用setMapper方法告訴signalmapper怎樣去處理原始信號,在這個例子中是把原始限號轉化為一個帶QString參數的信號。
3.最后接收轉化后的帶參數信號,這里把所轉化后的信號與槽函數連接,在槽函數中獲得需要的數據。
4.功能核心是要建立一個從發出原始信號的object到需要的數據的映射(setMapper函數)
2.將QT4.8.4中
修改其中的觸摸屏歷程,功能不夠需要添加英文字母按鍵。通過查看屬性發現,其中按鍵的實現QPushButton來創建,這里以a鍵為例,a鍵對象名設置panelButton_a.
需要注意的是,panelButton_a的focusPolicy屬性默認為StrongFocus,改為NoFocus,否則鍵盤不能彈出。
出自:http://blog.csdn.net/imxiangzi/article/details/50498505
具體講解:http://xl028.blog.163.com/blog/static/19973024220127276110749/