Qt输入法设计(嵌入式)

2012-7-9,设计模式(5)-装饰模式(Decorator),运用装饰模式改进的版本

2012-6-6,设计模式(1)-模板模式,运用模板模式改进的版本

2012-5-29,添加源码示例下载地址(文章末尾)

【描述】

用QT制作了输入法,能输入英文和数字以及字符。简要介绍,示出关键代码。在QLineEdit控件和QTableWidget中均可以使用,本例只给出了QLineEdit的情况。

【效果】

单击编辑框控件,跳出输入法。如图1所示:

图1 输入法效果

图2 开发板运行效果

【原理】将QToolButton控件上的字符,传给需要输入的控件。

【简介】

先利用QT Creator设计一个键盘界面,如图2所示:

图2 设计键盘界面

以字符为'q’的按钮为例,将对象命名为toolButton_q,以此类推。

【关键代码】

keyboard.h

[html]  view plain copy
  1. #ifndef  KeyBoard_H  
  2. #define  KeyBoard_H  
  3.   
  4. #include <QtGui>  
  5. #include <QSignalMapper>  
  6. #include "ui_keyboard.h"  
  7.   
  8. enum {  
  9.     iMode_Normal = 0,  
  10.     iMode_Passwd = 1  
  11. };  
  12.   
  13. namespace Ui {  
  14.     class KeyBoard;  
  15. }  
  16.   
  17. class KeyBoard : public QDialog, Ui::KeyBoard  
  18. {  
  19.     Q_OBJECT  
  20.   
  21. public:  
  22.      KeyBoard();  
  23.      ~KeyBoard();  
  24.   
  25.      //void mouseMoveEvent(QMouseEvent *);  
  26.      //void mousePressEvent(QMouseEvent *);  
  27.   
  28. public:  
  29.      QString text;  
  30.   
  31. private:  
  32.      QSignalMapper *signalMapper;  
  33.      QPoint dragPosition;  
  34.      bool caps_Lock;  
  35.      int inputMode;  
  36.      bool waitingForOperand;  
  37.   
  38. private:  
  39.      void setMapper();  
  40.      void connectMapper();  
  41.   
  42. signals:  
  43.      void setvalue(const QString &);  
  44.   
  45. private slots:  
  46.      void onCursorRight();  
  47.      void onCursorLeft();  
  48.      void onCursorUp();  
  49.      void onCursorDown();  
  50.   
  51.      void onHorizontalSliderValueChanged(int value);  
  52.      void setDispText(const QString& text);  
  53.      void onInvMode();  
  54.   
  55.      void onCapslock();  
  56.      void onEnter();  
  57.      void onBackspace();  
  58.      void onEsc();  
  59. };  
  60.   
  61. #endif //  KeyBoard_H  


keyboard.cpp

[html]  view plain copy
  1. #include <QtGui>  
  2. #include "keyboard.h"  
  3.   
  4. KeyBoard::KeyBoard()  
  5. {  
  6.     setupUi(this);  
  7.     setWindowFlags(Qt::Tool|Qt::WindowStaysOnTopHint|Qt::FramelessWindowHint);  
  8.     display->setFocus();  
  9.     waitingForOperand = true;  
  10.     inputMode = iMode_Normal;  
  11.     caps_Lock = false;  
  12.   
  13.     signalMapper=new QSignalMapper(this);  
  14.     setMapper();  
  15.     connectMapper();  
  16.   
  17.     connect(signalMapper,SIGNAL(mapped(const QString&)),this,SLOT(setDispText(const QString&)));  
  18.   
  19.     connect(toolButton_up,SIGNAL(clicked()),this,SLOT(onCursorUp()));  
  20.     connect(toolButton_down,SIGNAL(clicked()),this,SLOT(onCursorDown()));  
  21.     connect(toolButton_right,SIGNAL(clicked()),this,SLOT(onCursorRight()));  
  22.     connect(toolButton_left,SIGNAL(clicked()),this,SLOT(onCursorLeft()));  
  23.   
  24.     connect(toolButton_Inv,SIGNAL(clicked()),this,SLOT(onInvMode()));  
  25.     connect(toolButton_enter,SIGNAL(clicked()),this,SLOT(onEnter()));  
  26.     connect(toolButton_backspace,SIGNAL(clicked()),this,SLOT(onBackspace()));  
  27.     connect(toolButton_capslock,SIGNAL(clicked()),this,SLOT(onCapslock()));  
  28.     connect(toolButton_esc,SIGNAL(clicked()),this,SLOT(onEsc()));  
  29.     connect(horizontalSlider,SIGNAL(valueChanged(int)),this,SLOT(onHorizontalSliderValueChanged(int)));  
  30. }  
  31.   
  32. KeyBoard::~KeyBoard()  
  33. {  
  34.   
  35. }  
  36.   
  37.   
  38. /*  
  39. * Name : void mouseMoveEvent(QMouseEvent *event),void mousePressEvent(QMouseEvent *event)  
  40. * Type : QEvent  
  41. * Func : realize drag the window of keyBoard by mouse press and move  
  42. * In   : QMouseEvent  
  43. * Out  : Null  
  44. */  
  45.   
  46. /*  
  47. void KeyBoard::mouseMoveEvent(QMouseEvent *event)  
  48. {  
  49.     if (event->buttons() == Qt::LeftButton)  
  50.     {  
  51.         move(event->globalPos() - dragPosition);  
  52.         event->accept();  
  53.     }  
  54. }  
  55.   
  56. void KeyBoard::mousePressEvent(QMouseEvent *event)  
  57. {  
  58.     if (event->button() == Qt::LeftButton)  
  59.     {  
  60.         dragPosition = event->globalPos() - frameGeometry().topLeft();  
  61.         event->accept();  
  62.     }  
  63.     if (event->button() == Qt::RightButton)  
  64.     {  
  65.         close();  
  66.     }  
  67.   
  68. }  
  69. */  
  70.   
  71. /*  
  72. * Name : void setMapper()  
  73. * Type : function  
  74. * Func : mapping the toolButton text to signalMapper  
  75. * In   : Null  
  76. * Out  : Null  
  77. */  
  78. void KeyBoard::setMapper()  
  79. {  
  80.     //number  
  81.     signalMapper->setMapping(toolButton_0,toolButton_0->text());  
  82.     signalMapper->setMapping(toolButton_1,toolButton_1->text());  
  83.     signalMapper->setMapping(toolButton_2,toolButton_2->text());  
  84.     signalMapper->setMapping(toolButton_3,toolButton_3->text());  
  85.     signalMapper->setMapping(toolButton_4,toolButton_4->text());  
  86.     signalMapper->setMapping(toolButton_5,toolButton_5->text());  
  87.     signalMapper->setMapping(toolButton_6,toolButton_6->text());  
  88.     signalMapper->setMapping(toolButton_7,toolButton_7->text());  
  89.     signalMapper->setMapping(toolButton_8,toolButton_8->text());  
  90.     signalMapper->setMapping(toolButton_9,toolButton_9->text());  
  91.   
  92.     //letter  
  93.     signalMapper->setMapping(toolButton_a,toolButton_a->text());  
  94.     signalMapper->setMapping(toolButton_b,toolButton_b->text());  
  95.     signalMapper->setMapping(toolButton_c,toolButton_c->text());  
  96.     signalMapper->setMapping(toolButton_d,toolButton_d->text());  
  97.     signalMapper->setMapping(toolButton_e,toolButton_e->text());  
  98.     signalMapper->setMapping(toolButton_f,toolButton_f->text());  
  99.     signalMapper->setMapping(toolButton_g,toolButton_g->text());  
  100.     signalMapper->setMapping(toolButton_h,toolButton_h->text());  
  101.     signalMapper->setMapping(toolButton_i,toolButton_i->text());  
  102.     signalMapper->setMapping(toolButton_j,toolButton_j->text());  
  103.     signalMapper->setMapping(toolButton_k,toolButton_k->text());  
  104.     signalMapper->setMapping(toolButton_l,toolButton_l->text());  
  105.     signalMapper->setMapping(toolButton_m,toolButton_m->text());  
  106.     signalMapper->setMapping(toolButton_n,toolButton_n->text());  
  107.     signalMapper->setMapping(toolButton_o,toolButton_o->text());  
  108.     signalMapper->setMapping(toolButton_p,toolButton_p->text());  
  109.     signalMapper->setMapping(toolButton_q,toolButton_q->text());  
  110.     signalMapper->setMapping(toolButton_r,toolButton_r->text());  
  111.     signalMapper->setMapping(toolButton_s,toolButton_s->text());  
  112.     signalMapper->setMapping(toolButton_t,toolButton_t->text());  
  113.     signalMapper->setMapping(toolButton_u,toolButton_u->text());  
  114.     signalMapper->setMapping(toolButton_v,toolButton_v->text());  
  115.     signalMapper->setMapping(toolButton_w,toolButton_w->text());  
  116.     signalMapper->setMapping(toolButton_x,toolButton_x->text());  
  117.     signalMapper->setMapping(toolButton_y,toolButton_y->text());  
  118.     signalMapper->setMapping(toolButton_z,toolButton_z->text());  
  119.   
  120.     //other  
  121.     signalMapper->setMapping(toolButton_line1,toolButton_line1->text());  
  122.     signalMapper->setMapping(toolButton_line2,toolButton_line2->text());  
  123.     signalMapper->setMapping(toolButton_line3,toolButton_line3->text());  
  124.     signalMapper->setMapping(toolButton_wenhao,toolButton_wenhao->text());  
  125.     signalMapper->setMapping(toolButton_dot,toolButton_dot->text());  
  126.     signalMapper->setMapping(toolButton_space," ");  
  127.     signalMapper->setMapping(toolButton_tab,"\t");  
  128. }  
  129.   
  130. /*  
  131. * Name : void connectMapper()  
  132. * Type : function  
  133. * Func : connect the toolButton signal(clicked()) to the signalMapper slots(map())  
  134. * In   : Null  
  135. * Out  : Null  
  136. */  
  137. void KeyBoard::connectMapper()  
  138. {  
  139.     //number  
  140.     connect(toolButton_0,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  141.     connect(toolButton_1,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  142.     connect(toolButton_2,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  143.     connect(toolButton_3,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  144.     connect(toolButton_4,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  145.     connect(toolButton_5,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  146.     connect(toolButton_6,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  147.     connect(toolButton_7,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  148.     connect(toolButton_8,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  149.     connect(toolButton_9,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  150.   
  151.     //letter  
  152.     connect(toolButton_a,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  153.     connect(toolButton_b,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  154.     connect(toolButton_c,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  155.     connect(toolButton_d,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  156.     connect(toolButton_e,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  157.     connect(toolButton_f,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  158.     connect(toolButton_g,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  159.     connect(toolButton_h,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  160.     connect(toolButton_i,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  161.     connect(toolButton_j,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  162.     connect(toolButton_k,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  163.     connect(toolButton_l,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  164.     connect(toolButton_m,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  165.     connect(toolButton_n,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  166.     connect(toolButton_o,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  167.     connect(toolButton_p,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  168.     connect(toolButton_q,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  169.     connect(toolButton_r,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  170.     connect(toolButton_s,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  171.     connect(toolButton_t,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  172.     connect(toolButton_u,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  173.     connect(toolButton_v,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  174.     connect(toolButton_w,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  175.     connect(toolButton_x,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  176.     connect(toolButton_y,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  177.     connect(toolButton_z,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  178.   
  179.     //other  
  180.     connect(toolButton_line1,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  181.     connect(toolButton_line2,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  182.     connect(toolButton_line3,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  183.     connect(toolButton_wenhao,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  184.     connect(toolButton_dot,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  185.     connect(toolButton_space,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  186.     connect(toolButton_tab,SIGNAL(clicked()),signalMapper,SLOT(map()));  
  187. }  
  188.   
  189. void KeyBoard::onCursorUp()  
  190. {  
  191.     QKeyEvent upPress(QEvent::KeyPress,Qt::Key_Up,Qt::NoModifier);  
  192.     QApplication::sendEvent(QApplication::focusWidget(),&upPress);  
  193. }  
  194.   
  195. void KeyBoard::onCursorDown()  
  196. {  
  197.     QKeyEvent downPress(QEvent::KeyPress,Qt::Key_Down,Qt::NoModifier);  
  198.     QApplication::sendEvent(QApplication::focusWidget(),&downPress);  
  199. }  
  200.   
  201. /*  
  202. * Name : void onCursorRight()  
  203. * Type : slot  
  204. * Func : cursor move right  
  205. * In   : Null  
  206. * Out  : Null  
  207. */  
  208. void KeyBoard::onCursorRight()  
  209. {  
  210.     display->cursorForward(false,1);  
  211. }  
  212.   
  213. /*  
  214. * Name : void onCursorLeft()  
  215. * Type : slot  
  216. * Func : cursor move left  
  217. * In   : Null  
  218. * Out  : Null  
  219. */  
  220. void KeyBoard::onCursorLeft()  
  221. {  
  222.     display->cursorBackward(false,1);  
  223. }  
  224.   
  225. /*  
  226. * Name : void onHorizontalSliderValueChanged(int value)  
  227. * Type : slot  
  228. * Func :  
  229. * In   : int  
  230. * Out  : Null  
  231. */  
  232. void KeyBoard::onHorizontalSliderValueChanged(int value)  
  233. {  
  234.     horizontalSlider->setRange(0,255);  
  235.     qreal opacity=(qreal)((1.0/256.0)*value);  
  236.     setWindowOpacity(opacity);  
  237.     lcdNumber->display(value);  
  238. }  
  239.   
  240. /*  
  241. * Name : void setDispText(const QString& text)  
  242. * Type : slot  
  243. * Func : insert and show text on display(QLineEdit)  
  244. * In   : QString  
  245. * Out  : Null  
  246. */  
  247. void KeyBoard::setDispText(const QString& text)  
  248. {  
  249.     if(waitingForOperand)  
  250.     {  
  251.         display->clear();  
  252.         waitingForOperand = false;  
  253.     }  
  254.     display->insert(text);  
  255. }  
  256.   
  257. /*  
  258. * Name : void onInvMode()  
  259. * Type : slot  
  260. * Func : invert input mode  
  261. * In   : Null  
  262. * Out  : Null  
  263. */  
  264. void KeyBoard::onInvMode()  
  265. {  
  266.     if(inputMode == iMode_Normal)  
  267.     {  
  268.         inputMode = iMode_Passwd;  
  269.     }  
  270.     else if(inputMode == iMode_Passwd)  
  271.     {  
  272.         inputMode = iMode_Normal;  
  273.     }  
  274.   
  275.     if(inputMode == iMode_Normal)  
  276.     {  
  277.         display->setEchoMode(QLineEdit::Normal);  
  278.     }  
  279.     else if(inputMode == iMode_Passwd)  
  280.     {  
  281.         display->setEchoMode(QLineEdit::Password);  
  282.     }  
  283. }  
  284.   
  285. /*  
  286. * Name : void onCapslock()  
  287. * Type : slot  
  288. * Func : caps lock  
  289. * In   : Null  
  290. * Out  : Null  
  291. */  
  292. void KeyBoard::onCapslock()  
  293. {  
  294.     caps_Lock = !caps_Lock;  
  295.     if(caps_Lock)  
  296.     {  
  297.         //letter  
  298.         toolButton_a->setText("A");  
  299.         toolButton_b->setText("B");  
  300.         toolButton_c->setText("C");  
  301.         toolButton_d->setText("D");  
  302.         toolButton_e->setText("E");  
  303.         toolButton_f->setText("F");  
  304.         toolButton_g->setText("G");  
  305.         toolButton_h->setText("H");  
  306.         toolButton_i->setText("I");  
  307.         toolButton_j->setText("J");  
  308.         toolButton_k->setText("K");  
  309.         toolButton_l->setText("L");  
  310.         toolButton_m->setText("M");  
  311.         toolButton_n->setText("N");  
  312.         toolButton_o->setText("O");  
  313.         toolButton_p->setText("P");  
  314.         toolButton_q->setText("Q");  
  315.         toolButton_r->setText("R");  
  316.         toolButton_s->setText("S");  
  317.         toolButton_t->setText("T");  
  318.         toolButton_u->setText("U");  
  319.         toolButton_v->setText("V");  
  320.         toolButton_w->setText("W");  
  321.         toolButton_x->setText("X");  
  322.         toolButton_y->setText("Y");  
  323.         toolButton_z->setText("Z");  
  324.         toolButton_line1->setText("<");  
  325.         toolButton_line2->setText(">");  
  326.         toolButton_line3->setText("-");  
  327.         toolButton_dot->setText("*");  
  328.         toolButton_wenhao->setText("#");  
  329.     }  
  330.     else  
  331.     {  
  332.         //letter  
  333.         toolButton_a->setText("a");  
  334.         toolButton_b->setText("b");  
  335.         toolButton_c->setText("c");  
  336.         toolButton_d->setText("d");  
  337.         toolButton_e->setText("e");  
  338.         toolButton_f->setText("f");  
  339.         toolButton_g->setText("g");  
  340.         toolButton_h->setText("h");  
  341.         toolButton_i->setText("i");  
  342.         toolButton_j->setText("j");  
  343.         toolButton_k->setText("k");  
  344.         toolButton_l->setText("l");  
  345.         toolButton_m->setText("m");  
  346.         toolButton_n->setText("n");  
  347.         toolButton_o->setText("o");  
  348.         toolButton_p->setText("p");  
  349.         toolButton_q->setText("q");  
  350.         toolButton_r->setText("r");  
  351.         toolButton_s->setText("s");  
  352.         toolButton_t->setText("t");  
  353.         toolButton_u->setText("u");  
  354.         toolButton_v->setText("v");  
  355.         toolButton_w->setText("w");  
  356.         toolButton_x->setText("x");  
  357.         toolButton_y->setText("y");  
  358.         toolButton_z->setText("z");  
  359.         toolButton_line1->setText("/");  
  360.         toolButton_line2->setText("\\");  
  361.         toolButton_line3->setText("_");  
  362.         toolButton_dot->setText(".");  
  363.         toolButton_wenhao->setText("?");  
  364.     }  
  365.     setMapper();  
  366. }  
  367.   
  368. /*  
  369. * Name : void onEnter()  
  370. * Type : slot  
  371. * Func : enter and emit the signal to editor to set text  
  372. * In   : Null  
  373. * Out  : Null  
  374. */  
  375. void KeyBoard::onEnter()  
  376. {  
  377.     waitingForOperand = true;  
  378.     text = display->text();  
  379.     emit setvalue(text);  
  380.     display->clear();  
  381.     this->close();  
  382. }  
  383.   
  384. /*  
  385. * Name : void onEsc()  
  386. * Type : slot  
  387. * Func : Esc  
  388. * In   : Null  
  389. * Out  : Null  
  390. */  
  391. void KeyBoard::onEsc()  
  392. {  
  393.     display->clear();  
  394.     text.clear();  
  395.     this->close();  
  396. }  
  397.   
  398. /*  
  399. * Name : void onBackspace()  
  400. * Type : slot  
  401. * Func : backspace  
  402. * In   : Null  
  403. * Out  : Null  
  404. */  
  405. void KeyBoard::onBackspace()  
  406. {  
  407.     display->backspace();  
  408. }  


inputmethod.h

[html]  view plain copy
  1. #ifndef INPUTMETHOD_H  
  2. #define INPUTMETHOD_H  
  3.   
  4. #include "keyboard.h"  
  5.   
  6. class InputMethod:public KeyBoard  
  7. {  
  8.     Q_OBJECT  
  9. public:  
  10.     InputMethod();  
  11.     ~InputMethod();  
  12.   
  13.     bool eventFilter(QObject *obj, QEvent *event);  
  14.   
  15. public:  
  16.     KeyBoard *keyboard;  
  17.   
  18. public:  
  19.     void showKeyBoard();  
  20.   
  21. signals:  
  22.     void setImObjName(QString);  
  23.   
  24.   
  25. };  
  26.   
  27. #endif // INPUTMETHOD_H  


inputmethod.cpp

[html]  view plain copy
  1. #include <QDebug>  
  2. #include "inputmethod.h"  
  3.   
  4. InputMethod::InputMethod()  
  5. {  
  6.     keyboard = new KeyBoard;  
  7.     setWindowFlags(Qt::Tool|Qt::WindowStaysOnTopHint|Qt::FramelessWindowHint);  
  8. }  
  9.   
  10. InputMethod::~InputMethod()  
  11. {  
  12.     delete keyboard;  
  13. }  
  14.   
  15. /*  
  16. * Name : void eventFilter(QObject *obj, QEvent *event);  
  17. * Type : QEvent  
  18. * Func : judge input method event  
  19. * In   : QObject,QEvent  
  20. * Out  : bool  
  21. */  
  22. bool InputMethod::eventFilter(QObject *obj, QEvent *event)  
  23. {  
  24.   
  25.     if(event->type()==QEvent::MouseButtonPress)  
  26.     {  
  27.         emit setImObjName(obj->objectName()); //send the Object Name of event to judge who trigger it  
  28.         //qDebug() <<obj->objectName();  
  29.         showKeyBoard();  
  30.         return true;  
  31.     }  
  32.   
  33.     return QObject::eventFilter(obj,event);  
  34. }  
  35.   
  36.   
  37. /*  
  38. * Name : void showKeyBoard();  
  39. * Type : function  
  40. * Func : show keyBoard  
  41. * In   : Null  
  42. * Out  : Null  
  43. */  
  44. void InputMethod::showKeyBoard()  
  45. {  
  46.     keyboard->setWindowFlags(Qt::Tool|Qt::WindowStaysOnTopHint|Qt::FramelessWindowHint);  
  47.     keyboard->move(50,120);  
  48.     keyboard->exec();  
  49. }  

 

【使用方法】

以QLineEdit为例说明:

(1) 首先,在需要输入法的控件文件中包含inputmethod.h文件;

#include "inputmethod.h"

(2) 创建输入法对象

im = new InputMethod;

(3) QLineEdit对象添加事件机制

[html]  view plain copy
  1. managerEdit->installEventFilter(im);  
  2. passwdEdit->installEventFilter(im);  
  3.   
  4. managerEdit->setObjectName("managerEdit");  
  5. passwdEdit->setObjectName("passwdEdit");  
  6.   
  7. connect(im,SIGNAL(setImObjName(QString)),this,SLOT(createImConnect(QString)));//connect the input method  


该方法是通过判断对象名,实现在不同控件中切换。所以一定要给对象命名。

(4) 槽函数createImConnect(QString ObjName)的编写

[html]  view plain copy
  1. void QLogin::createImConnect(QString ObjName)  
  2. {  
  3.     disconnect(im->keyboard,SIGNAL(setvalue(QString)),passwdEdit,SLOT(setText(QString)));  
  4.     disconnect(im->keyboard,SIGNAL(setvalue(QString)),managerEdit,SLOT(setText(QString)));  
  5.   
  6.     if(ObjName=="managerEdit")  
  7.     {  
  8.         connect(im->keyboard,SIGNAL(setvalue(QString)),managerEdit,SLOT(setText(QString)));  
  9.     }  
  10.     else  
  11.     {  
  12.   
  13.         connect(im->keyboard,SIGNAL(setvalue(QString)),passwdEdit,SLOT(setText(QString)));  
  14.     }  
  15.   
  16. }  

 

【示例下载地址】

 http://download.csdn.net/detail/tandesir/4337488(有多个版本,个人推荐的版本http://download.csdn.net/detail/tandesir/4378244

(2012-6-3)

*该资源是针对嵌入式开发板的版本,只能输入英文和数字,以及少数的符号。虽然可以跨平台运行,但基于X86系统是不合适的,至少不会获得良好的用户体验,好像只是界面交互。上传资源只是为了学习交流,如果是为了做基于Windows XP的输入法,参考价值不大。

*CSDN的<资源>功能,无法修改,也无法删除。上传资源者请慎重,至少去掉个人信息。希望CSDN可以赋予用户对资源修改、删除的权限。

 

【写在最后】 

看到他人对资源的评论,觉得很有趣。有人说是界面交互。有人说是短信机。严格来讲,这确实不能和PC机上输入法相比,原因如下:

(1) 只能输入少数英文字符;

(2) 关联特定的控件(见设计模式(1)-模板模式(Template) ,个人推荐这个版本);

(3) 没有事先预置的词库。

但我认为这种做法,在嵌入式平台还是有价值的。其一,它占用很少的资源;其二,确实能有效的实现英文的输入。可以说是界面交互。但短信机的称呼就不正确,因为没有实现发短信的功能,如果有必要可以加上,呵呵。

 转载:http://blog.csdn.net/tandesir/article/details/7283158

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值