Qt之鍵盤講解


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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM