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.
  • 相关阅读:
    实现可重启线程
    让别人能登陆你的mysql
    zmq消息订阅
    git备忘
    【LeetCode】数组排列问题(permutations)(附加next_permutation解析)
    【LeetCode】 数相加组合 Combination Sum
    【LeetCode】【找元素】Find First and Last Position of Element in Sorted Array
    【LeetCode】【数组归并】Merge k Sorted Lists
    【LeetCode】【动态规划】Generate Parentheses(括号匹配问题)
    【Leetcode】Remove Nth Node From End of List
  • 原文地址:https://www.cnblogs.com/wang1994/p/5942603.html
Copyright © 2011-2022 走看看