zoukankan      html  css  js  c++  java
  • 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/

    The future's not set,there is no fate but what we make for ourselves.
  • 相关阅读:
    CodeForces gym Nasta Rabbara lct
    bzoj 4025 二分图 lct
    CodeForces 785E Anton and Permutation
    bzoj 3669 魔法森林
    模板汇总——快读 fread
    bzoj2049 Cave 洞穴勘测 lct
    bzoj 2002 弹飞绵羊 lct裸题
    HDU 6394 Tree 分块 || lct
    HDU 6364 Ringland
    nyoj221_Tree_subsequent_traversal
  • 原文地址:https://www.cnblogs.com/wang1994/p/5942603.html
Copyright © 2011-2022 走看看