搜索
bottom↓
回复: 15

分享我刚写好QT拼音键盘,拼音检索参照的论坛网友

[复制链接]

出0入10汤圆

发表于 2019-9-30 15:53:15 | 显示全部楼层 |阅读模式
本帖最后由 竹叶听筝 于 2019-9-30 15:58 编辑

    由于找不到合适QT拼音软键盘,我自己就写了一个。拼音检索参照的论坛网友 https://www.amobbs.com/thread-5668320-1-1.html
    我是一个按键一个按键添加的,所以跟平台就无关了。windos,linux,qt开发板(我是imx283),都可以使用。需要注意的开发板的汉字字体,和QT的字库可能有出入
  我把所有按键,注册到一个槽函数里面,然后在发送信号。
//关联2个槽,第一个是发出字母,第二个是点击表格弹出键盘
    QObject::connect( input_mode1,SIGNAL(sendkey(QString)),this,SLOT(table_get(QString)));
    QObject::connect( ui->tableWidget,SIGNAL(clicked(QModelIndex)),this,SLOT(event()));
然后在判断鼠标点击的位置,我程序里面只有点击 报警门限那一列才会弹出输入法,别的无效。   
大小写可切换,字母,拼音,符号,我基本上都写好到了。 关于拼音检索,可参看上面的论坛网友写的
   有需要的可以,下载看看
#include "input_key.h"
#include "ui_input_key.h"
#include <stdio.h>
#include <string.h>
#include <stdio.h>
#include <QDebug>
#include <QMessageBox>
#include <QLabel>
#include <QString>
#include <QByteArray>
#include "hanzi.h"
#include <QPushButton>
#include <QFont>

input_key::input_key(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::input_key)
{
    ui->setupUi(this);
   //  setFixedSize(212,150);//设置ui界面大小
    setFixedSize(212,110);
    label0= new QLabel(this);
    label0->resize(40,20);
    label0->move(0,115);
    label0->setText("输入");
    label0->hide();
       label= new QLabel(this);
       label->resize(100,20);
       label->move(40,115);
       label->hide();

       label1= new QLabel(this);
      label1->move(0,135);
      label1->resize(25,15);
      label1->hide();
      label2= new QLabel(this);
     label2->resize(25,15);
     label2->move(30,135);
     label2->hide();
     label3= new QLabel(this);
        label3->resize(25,15);
        label3->move(60,135);
        label3->hide();
        label4= new QLabel(this);
        label4->resize(25,15);
        label4->move(90,135);
        label4->hide();
        label5= new QLabel(this);
        label5->resize(25,15);
        label5->move(120,135);
        label5->hide();


    signalMapper=new QSignalMapper(this);
    connect(ui->button_a,SIGNAL(clicked()),signalMapper,SLOT(map()));//原始信号传递给signalmapper
    connect(ui->button_b,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_c,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_d,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_e,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_f,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_g,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_h,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_i,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_j,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_k,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_l,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_m,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_n,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_o,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_p,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_q,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_r,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_s,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_t,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_u,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_v,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_w,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_x,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_y,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_z,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_point,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_del,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_cap,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_num,SIGNAL(clicked()),signalMapper,SLOT(map()));
    connect(ui->button_pinyin,SIGNAL(clicked()),signalMapper,SLOT(map()));//拼音
    connect(ui->button_left,SIGNAL(clicked()),signalMapper,SLOT(map()));//左移
    connect(ui->button_right,SIGNAL(clicked()),signalMapper,SLOT(map()));//右移
    connect(ui->button_enter,SIGNAL(clicked()),signalMapper,SLOT(map()));//确定键
    connect(ui->button_speace,SIGNAL(clicked()),signalMapper,SLOT(map()));//空格键

    signalMapper->setMapping(ui->button_a,"a");//设置signalmapper的转发规则, 转发为参数为QString类型的信号, 并把texts的内容作为实参传递
    signalMapper->setMapping(ui->button_b,"b");
    signalMapper->setMapping(ui->button_c,"c");
    signalMapper->setMapping(ui->button_d,"d");
    signalMapper->setMapping(ui->button_e,"e");
    signalMapper->setMapping(ui->button_f,"f");
    signalMapper->setMapping(ui->button_g,"g");
    signalMapper->setMapping(ui->button_h,"h");
    signalMapper->setMapping(ui->button_i,"i");
    signalMapper->setMapping(ui->button_j,"j");
    signalMapper->setMapping(ui->button_k,"k");
    signalMapper->setMapping(ui->button_l,"l");
    signalMapper->setMapping(ui->button_m,"m");
    signalMapper->setMapping(ui->button_n,"n");
    signalMapper->setMapping(ui->button_o,"o");
    signalMapper->setMapping(ui->button_p,"p");
    signalMapper->setMapping(ui->button_q,"q");
    signalMapper->setMapping(ui->button_r,"r");
    signalMapper->setMapping(ui->button_s,"s");
    signalMapper->setMapping(ui->button_t,"t");
    signalMapper->setMapping(ui->button_u,"u");
    signalMapper->setMapping(ui->button_v,"v");
    signalMapper->setMapping(ui->button_w,"w");
    signalMapper->setMapping(ui->button_x,"x");
    signalMapper->setMapping(ui->button_y,"y");
    signalMapper->setMapping(ui->button_z,"z");
    signalMapper->setMapping(ui->button_point,".");
    signalMapper->setMapping(ui->button_del,"del");
    signalMapper->setMapping(ui->button_cap,"cap");
    signalMapper->setMapping(ui->button_num,"num");
    signalMapper->setMapping(ui->button_pinyin,"pinyin");
    signalMapper->setMapping(ui->button_left,"left");
    signalMapper->setMapping(ui->button_right,"right");
    signalMapper->setMapping(ui->button_enter,"enter");
    signalMapper->setMapping(ui->button_speace,"speace");
    connect(signalMapper, SIGNAL(mapped (const QString &)),
            this, SLOT(doClicked(const QString &)));//将转发的信号连接到最终的槽函数
}

input_key::~input_key()
{
    delete ui;
}



void input_key::doClicked(const QString & btnname)
{ //QMessageBox::information(this, "Clicked", btnname + " is clicked!");//显示被按下的btn名称。
   static int cap_flag=0; //保存大写状态 0 小写 、 1 大写  2 数字 3拼音
   static int num_flag=0;
   static int pinyin_flag=0;
   QString str=NULL;
   QString key_v ;
  static QString Hanzi;//最终的汉字
if("cap"==btnname && cap_flag==0 )//大写
   { cap_flag=1;num_flag=0;  pinyin_flag=0;   ui->button_cap->setText("小写");
       ui->button_a->setText("A");ui->button_b->setText("B");ui->button_c->setText("C");
       ui->button_d->setText("D");ui->button_e->setText("E");ui->button_f->setText("F");
       ui->button_g->setText("G");ui->button_h->setText("H");ui->button_i->setText("I");
       ui->button_j->setText("J");ui->button_k->setText("K");ui->button_l->setText("L");
       ui->button_m->setText("M");ui->button_n->setText("N");ui->button_o->setText("O");
       ui->button_p->setText("P");ui->button_q->setText("Q");ui->button_r->setText("R");
       ui->button_s->setText("S");ui->button_t->setText("T");ui->button_u->setText("U");
       ui->button_v->setText("V");ui->button_w->setText("W");ui->button_x->setText("X");
       ui->button_y->setText("Y");ui->button_z->setText("Z");
       setFixedSize(212,110);  return ;
        //key_v="cap";emit sendkey(key_v);
           }
    else if("cap"==btnname && cap_flag==1)//小写
           {      cap_flag=0;num_flag=0; pinyin_flag=0; ui->button_cap->setText("大写");
       ui->button_a->setText("a");ui->button_b->setText("b");ui->button_c->setText("c");
       ui->button_d->setText("d");ui->button_e->setText("e");ui->button_f->setText("f");
       ui->button_g->setText("g");ui->button_h->setText("h");ui->button_i->setText("i");
       ui->button_j->setText("j");ui->button_k->setText("k");ui->button_l->setText("l");
       ui->button_m->setText("m");ui->button_n->setText("n");ui->button_o->setText("o");
       ui->button_p->setText("p");ui->button_q->setText("q");ui->button_r->setText("r");
       ui->button_s->setText("s");ui->button_t->setText("t");ui->button_u->setText("u");
       ui->button_v->setText("v");ui->button_w->setText("w");ui->button_x->setText("x");
       ui->button_y->setText("y");ui->button_z->setText("z");
       //key_v="cap";emit sendkey(key_v);
        setFixedSize(212,110); return ;
        }
   else if("num"==btnname &&num_flag==0)//数字 符号
   {   num_flag=1;cap_flag=0;pinyin_flag=0;
       ui->button_q->setText("1");ui->button_w->setText("2");ui->button_e->setText("3");
       ui->button_r->setText("4");ui->button_t->setText("5");ui->button_y->setText("6");
       ui->button_u->setText("7");ui->button_i->setText("8");ui->button_o->setText("9");
       ui->button_p->setText("0");
       ui->button_a->setText("+");ui->button_s->setText("-");
       ui->button_d->setText("*");ui->button_f->setText("/");ui->button_g->setText("(");
       ui->button_h->setText(")");ui->button_j->setText("$");ui->button_k->setText("&&");
       ui->button_l->setText("@");
       ui->button_z->setText(":");ui->button_x->setText(";");
       ui->button_c->setText(",") ;ui->button_v->setText("?");ui->button_b->setText("!");
       ui->button_n->setText("'");ui->button_m->setText("_");
       //key_v="num";emit sendkey(key_v);
       setFixedSize(212,110); return ;
       }
   else if("pinyin"==btnname && pinyin_flag==0)//拼音
      { pinyin_flag=1; cap_flag=0;num_flag=0;
       ui->button_a->setText("a");ui->button_b->setText("b");ui->button_c->setText("c");
       ui->button_d->setText("d");ui->button_e->setText("e");ui->button_f->setText("f");
       ui->button_g->setText("g");ui->button_h->setText("h");ui->button_i->setText("i");
       ui->button_j->setText("j");ui->button_k->setText("k");ui->button_l->setText("l");
       ui->button_m->setText("m");ui->button_n->setText("n");ui->button_o->setText("o");
       ui->button_p->setText("p");ui->button_q->setText("q");ui->button_r->setText("r");
       ui->button_s->setText("s");ui->button_t->setText("t");ui->button_u->setText("u");
       ui->button_v->setText("v");ui->button_w->setText("w");ui->button_x->setText("x");
       ui->button_y->setText("y");ui->button_z->setText("z");
       QFont font;
      font.setFamily("宋体");//先定义类的对象,然后在添加到item中
      font.setPointSize(9);
       setFixedSize(212,150);//设置ui界面大小
        label->setText(NULL);
        label1->setFont(font);label2->setFont(font);label3->setFont(font);label4->setFont(font);label5->setFont(font);
        label0->show();label->show();label1->show();label2->show();
        label3->show();label4->show();label5->show();

       return ;
     }
   if( pinyin_flag ==1)
   {    cap_flag=0;num_flag=0;
        if("a"==btnname){key_v="a";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("b"==btnname){key_v="b";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("c"==btnname){key_v="c";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("d"==btnname){key_v="d";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("e"==btnname){key_v="e";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("f"==btnname){key_v="f";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("g"==btnname){key_v="g";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("h"==btnname){key_v="h";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("i"==btnname){key_v="i";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("j"==btnname){key_v="j";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("k"==btnname){key_v="k";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("l"==btnname){key_v="l";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("m"==btnname){key_v="m";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("n"==btnname){key_v="n";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("o"==btnname){key_v="o";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("p"==btnname){key_v="p";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("q"==btnname){key_v="q";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("r"==btnname){key_v="r";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("s"==btnname){key_v="s";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("t"==btnname){key_v="t";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("u"==btnname){key_v="u";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("v"==btnname){key_v="v";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("w"==btnname){key_v="w";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("x"==btnname){key_v="x";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("y"==btnname){key_v="y";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("z"==btnname){key_v="z";str=label->text() ; key_v=str+key_v; label->setText(key_v);}
   else if("."==btnname){key_v=".";emit sendkey(key_v); }
   else if("speace"==btnname) {key_v=" ";emit sendkey(key_v); }
        else if("del"==btnname){ str=label->text();
            if(str==NULL){key_v="del";emit sendkey(key_v);} //删除键 删除字母数字,汉字
            else { str=str.left(str.length()-1);//删除最后一个字符
                   label->setText(str); }}

               key_v=label->text();
          QByteArray ba = key_v.toLatin1(); //QStrig 转 byteArray
          char *pin = ba.data();//byteArray 转 char
           char *py =py_ime(pin);
          QByteArray da;
          QString data;
            da = QByteArray(py);//  char 转 byteArray
           data=QString(da);   //  byteArray 转 QStrig
          int len;
          static int location=0;
          len =data.size();
          QString pinyin;

          if("right"==btnname){
              if(location>len)//翻到最后了
                  location=0;
              else
                location=location+1;

               }
          else if("left"==btnname){ if(location>1) location=location-1; else location=0;  }
          if(location>len)//如果大于最大长度,从0开始选择
          {location=0;}
          else  pinyin=data.mid(location/5*5,5);//从当前位置0, 向右偏移5个

          label1->setText( "1:"+pinyin.mid(0,1)  );
          label2->setText( "2:"+pinyin.mid(1,1) );
          label3->setText( "3:"+pinyin.mid(2,1) );
          label4->setText( "4:"+ pinyin.mid(3,1) );
          label5->setText( "5:"+ pinyin.mid(4,1) );

              QPalette pe,white;

                                                      //r,g,b,透明度
            // pe.setColor(QPalette::WindowText,QColor (30, 33 ,222, 255)); //改变文本
            pe.setColor(QPalette::Background,QColor (255, 222, 173,255));//改变背景颜色
            white.setColor(QPalette::Background,QColor (255, 255, 255,255));//白
   switch (location%5) {
            case 0:
                label1->setAutoFillBackground(true);  //一定要这句,否则不行
                label1->setPalette(pe);
                label2->setPalette(white);
                label3->setPalette(white);
                label4->setPalette(white);
                label5->setPalette(white);
                 Hanzi=label1->text();
                break;
            case 1:
                label2->setAutoFillBackground(true);  //一定要这句,否则不行
                label1->setPalette(white);
                label2->setPalette(pe);
                label3->setPalette(white);
                label4->setPalette(white);
                label5->setPalette(white);
                Hanzi=label2->text();
                break;
            case 2:
                label3->setAutoFillBackground(true);  //一定要这句,否则不行
                label1->setPalette(white);
                label2->setPalette(white);
                label3->setPalette(pe);
                label4->setPalette(white);
                label5->setPalette(white);
                Hanzi=label3->text();
                break;
            case 3:
                label4->setAutoFillBackground(true);  //一定要这句,否则不行
                label1->setPalette(white);
                label2->setPalette(white);
                label3->setPalette(white);
                label4->setPalette(pe);
                label5->setPalette(white);
                Hanzi=label4->text();
                break;
            case 4:
                label5->setAutoFillBackground(true);  //一定要这句,否则不行
                label1->setPalette(white);
                label2->setPalette(white);
                label3->setPalette(white);
                label4->setPalette(white);
                label5->setPalette(pe);
                Hanzi=label5->text();
                break;
            default:
                break;
            }

       if("enter"==btnname){
        // qDebug()<<"hanzi__1"<<Hanzi<<endl;
            Hanzi=Hanzi.right(Hanzi.length()-2);//删除最前面的两个字符 1:
         //  qDebug()<<"Hanzi.length()"<<Hanzi.length()<<endl;
           if(Hanzi.length()==1&&Hanzi==" ")
           {;}
           else {emit sendkey(Hanzi);
         //  qDebug()<<"hanzi__2"<<Hanzi<<endl;
           }
          label->setText(NULL);label1->setText(NULL);label2->setText(NULL);label3->setText(NULL);label4->setText(NULL);label5->setText(NULL);
        }


           // label1->setStyleSheet("color:blue");

   }
   else  if("a"==btnname) {if(cap_flag==0&&num_flag==0)key_v='a';else if(cap_flag==1) key_v ='A';else if(num_flag==1) key_v ='+';emit sendkey(key_v);  }
   else  if("b"==btnname) {if(cap_flag==0&&num_flag==0)key_v='b';else if(cap_flag==1) key_v ='B';else if(num_flag==1) key_v ='!';emit sendkey(key_v);  }
   else  if("c"==btnname) {if(cap_flag==0&&num_flag==0)key_v='c';else if(cap_flag==1) key_v ='C';else if(num_flag==1) key_v =',';emit sendkey(key_v);  }
   else  if("d"==btnname) {if(cap_flag==0&&num_flag==0)key_v='d';else if(cap_flag==1) key_v ='D';else if(num_flag==1) key_v ='*';emit sendkey(key_v);  }
   else  if("e"==btnname) {if(cap_flag==0&&num_flag==0)key_v='e';else if(cap_flag==1) key_v ='E';else if(num_flag==1) key_v ='3';emit sendkey(key_v);  }
   else  if("f"==btnname) {if(cap_flag==0&&num_flag==0)key_v='f';else if(cap_flag==1) key_v ='F';else if(num_flag==1) key_v ='/';emit sendkey(key_v);  }
   else  if("g"==btnname) {if(cap_flag==0&&num_flag==0)key_v='g';else if(cap_flag==1) key_v ='G';else if(num_flag==1) key_v ='(';emit sendkey(key_v);  }
   else  if("h"==btnname) {if(cap_flag==0&&num_flag==0)key_v='h';else if(cap_flag==1) key_v ='H';else if(num_flag==1) key_v =')';emit sendkey(key_v);  }
   else  if("i"==btnname) {if(cap_flag==0&&num_flag==0)key_v='i';else if(cap_flag==1) key_v ='I';else if(num_flag==1) key_v ='8';emit sendkey(key_v);  }
   else  if("j"==btnname) {if(cap_flag==0&&num_flag==0)key_v='j';else if(cap_flag==1) key_v ='J';else if(num_flag==1) key_v ='$';emit sendkey(key_v);  }
   else  if("k"==btnname) {if(cap_flag==0&&num_flag==0)key_v='k';else if(cap_flag==1) key_v ='K';else if(num_flag==1) key_v ='&';emit sendkey(key_v);  }
   else  if("l"==btnname) {if(cap_flag==0&&num_flag==0)key_v='l';else if(cap_flag==1) key_v ='L';else if(num_flag==1) key_v ='@';emit sendkey(key_v);  }
   else  if("m"==btnname) {if(cap_flag==0&&num_flag==0)key_v='m';else if(cap_flag==1) key_v ='M';else if(num_flag==1) key_v ='_';emit sendkey(key_v);  }
   else  if("n"==btnname) {if(cap_flag==0&&num_flag==0)key_v='n';else if(cap_flag==1) key_v ='N';else if(num_flag==1) key_v ="'";emit sendkey(key_v);  }
   else  if("o"==btnname) {if(cap_flag==0&&num_flag==0)key_v='o';else if(cap_flag==1) key_v ='O';else if(num_flag==1) key_v ='9';emit sendkey(key_v);  }
   else  if("p"==btnname) {if(cap_flag==0&&num_flag==0)key_v='p';else if(cap_flag==1) key_v ='P';else if(num_flag==1) key_v ='0';emit sendkey(key_v);  }
   else  if("q"==btnname) {if(cap_flag==0&&num_flag==0)key_v='q';else if(cap_flag==1) key_v ='Q';else if(num_flag==1) key_v ='1';emit sendkey(key_v);  }
   else  if("r"==btnname) {if(cap_flag==0&&num_flag==0)key_v='r';else if(cap_flag==1) key_v ='R';else if(num_flag==1) key_v ='4';emit sendkey(key_v);  }
   else  if("s"==btnname) {if(cap_flag==0&&num_flag==0)key_v='s';else if(cap_flag==1) key_v ='S';else if(num_flag==1) key_v ='-';emit sendkey(key_v);  }
   else  if("t"==btnname) {if(cap_flag==0&&num_flag==0)key_v='t';else if(cap_flag==1) key_v ='T';else if(num_flag==1) key_v ='5';emit sendkey(key_v);  }
   else  if("u"==btnname) {if(cap_flag==0&&num_flag==0)key_v='u';else if(cap_flag==1) key_v ='U';else if(num_flag==1) key_v ='7';emit sendkey(key_v);  }
   else  if("v"==btnname) {if(cap_flag==0&&num_flag==0)key_v='v';else if(cap_flag==1) key_v ='V';else if(num_flag==1) key_v ='?';emit sendkey(key_v);  }
   else  if("w"==btnname) {if(cap_flag==0&&num_flag==0)key_v='w';else if(cap_flag==1) key_v ='W';else if(num_flag==1) key_v ='2';emit sendkey(key_v);  }
   else  if("x"==btnname) {if(cap_flag==0&&num_flag==0)key_v='x';else if(cap_flag==1) key_v ='X';else if(num_flag==1) key_v =';';emit sendkey(key_v);  }
   else  if("y"==btnname) {if(cap_flag==0&&num_flag==0)key_v='y';else if(cap_flag==1) key_v ='Y';else if(num_flag==1) key_v ='6';emit sendkey(key_v);  }
   else  if("z"==btnname) {if(cap_flag==0&&num_flag==0)key_v='z';else if(cap_flag==1) key_v ='Z';else if(num_flag==1) key_v =':';emit sendkey(key_v);  }
   else  if("."==btnname) {if(cap_flag==0&&num_flag==0)key_v='.';else if(cap_flag==1) key_v ='.';else if(num_flag==1) key_v ='.';emit sendkey(key_v);  }
   else if("speace"==btnname){key_v=" ";emit sendkey(key_v); }
    else  if("del"==btnname)
   {

       key_v="del";emit sendkey(key_v);  //删除键 删除字母数字,汉字

   }
   //qDebug()<<num_flag;
}

//////////////////////////////////////////////////////////////////////////
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QWidget>
#include <QStackedWidget>
#include <QDesktopWidget>
#include <QDebug>
#include <QStyle>
#include <QPlastiqueStyle>
#include <QHeaderView>
#include <QFont>
static int table_row=0;
static int table_col=0;
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    input_mode1 = new input_key(this);//添加输入法
   ui->tableWidget->setColumnWidth(0,80);//设置列的宽度 一共5列
   ui->tableWidget->setColumnWidth(1,100);
   ui->tableWidget->setColumnWidth(2,100);
   ui->tableWidget->setColumnWidth(3,100);
   ui->tableWidget->setColumnWidth(4,100);
   for(int i=0;i<6;i++)
   ui->tableWidget->setRowHeight(i,30);//设置行的高度 一共8行
   ui->tableWidget->verticalHeader()->setVisible(false);//隐藏列表头
       //设置单击选择一行
// ui->tableWidget->setBehuavior(QAbstractItemView::SelectRows);
        //设置每行内容不可编辑
  ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
        //设置只能选择一行,不能选择多行
  ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
  ui->tableWidget->resize(480, 272); //设置区域大小
  ui->tableWidget->move(0,0);
  //关联2个槽,第一个是发出字母,第二个是点击表格弹出键盘
    QObject::connect( input_mode1,SIGNAL(sendkey(QString)),this,SLOT(table_get(QString)));
    QObject::connect( ui->tableWidget,SIGNAL(clicked(QModelIndex)),this,SLOT(event()));

  int a,b;
   QString c;
      a=0;b=0;c="#01";addItemContent(a,b,c);

     a=0;b=1;c="温度";addItemContent(a,b,c);
     a=0;b=2;c="10.12mA";addItemContent(a,b,c);
      a=0;b=3;c="20.34mA";addItemContent(a,b,c);
      a=0;b=4;c="连接成功";addItemContent(a,b,c);


}
/*给单元格添加内容                行         列        内容   */
void MainWindow ::addItemContent(int row, int column, QString content)

{
    item  = new QTableWidgetItem (content);
    ui->tableWidget->setItem(row, column, item);
    item->setBackgroundColor(QColor(255,255,224));
    item->setTextColor(QColor(0,0,139));
    QFont font;
    font.setFamily("宋体");//先定义类的对象,然后在添加到item中
    font.setPointSize(12);
    item->setFont(font);
    ui->tableWidget->item(row,column)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);//居中设置
    //另:如果需要对所有的单元格都使用这种字体,则可以使用
//ui->tableWidget->setFont(QFont("Helvetica"));
}
void  MainWindow::event()//点击表格,弹出输入法控件
{    QModelIndex current;

    current=ui->tableWidget->currentIndex();//获取表格位置,这个问题我查了一个晚上
    //qDebug()<<current.row();

     table_row=current.row();
     table_col=current.column();


     if(table_row<6&&table_col==3)
                input_mode1 ->show();
     else
                input_mode1->hide();

}
void MainWindow::table_get(QString str)
{
   QString  string=NULL;
   QString  data_text=ui->tableWidget->currentIndex().data().toString();
   int length=0;             //文本内容获取,又研究到12点多,哎。。。


    if(data_text==""&&"del"!=str)//如果文本内容为空
          addItemContent(table_row,table_col,str); //调用显示数据函数,函数包含行列,大小,颜色

     else if("del"==str&& data_text!="")
         {
           length= data_text.length();
           string= data_text.remove(length-1,1);//删除最后一个字符
           addItemContent(table_row,table_col,string);//调用显示数据函数,函数包含行列,大小,颜色
          }
      else if("del"==str&& data_text=="")
               {
                 return ;
                }
    else
      {
         string= data_text+str;
         addItemContent(table_row,table_col,string);//调用显示数据函数,函数包含行列,大小,颜色
       }
}



MainWindow::~MainWindow()
{
    delete ui;
}



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入8汤圆

发表于 2019-9-30 15:57:53 | 显示全部楼层
好东西,要顶下。

出0入10汤圆

 楼主| 发表于 2019-9-30 15:59:21 | 显示全部楼层
刚刚把图片缩小了,我马上坐火车回家了。8点的

出0入0汤圆

发表于 2019-9-30 16:11:34 来自手机 | 显示全部楼层
顶一下。
头像被屏蔽

出0入0汤圆

发表于 2019-9-30 16:12:07 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出40入42汤圆

发表于 2019-9-30 16:18:57 | 显示全部楼层
刚好前几天自己手撸了一个MFC上的简单拼音输入模块,原来楼主参考的那个帖子我也收藏了,没想起来,搞得自己手撸了4000+的字,有点冤……

另外,如果能够支持词组搜索就好了

出0入0汤圆

发表于 2019-9-30 16:27:42 | 显示全部楼层
楼主niubility QT输入法

出0入4汤圆

发表于 2019-9-30 16:32:26 | 显示全部楼层
佩服楼主的探索和共享精神

出0入10汤圆

 楼主| 发表于 2019-9-30 17:30:56 | 显示全部楼层
18501501628 发表于 2019-9-30 16:12
大佬好牛逼,其实那么多的conncet函数 你可以使用   
QList btns = ui->widget_main->findChildren();
    ...

等我回家了,研究研究

出0入10汤圆

 楼主| 发表于 2019-9-30 17:36:00 | 显示全部楼层
落叶知秋 发表于 2019-9-30 16:18
刚好前几天自己手撸了一个MFC上的简单拼音输入模块,原来楼主参考的那个帖子我也收藏了,没想起来,搞得自 ...

那个拼音检索,相当好用。我都没没改他的源码,直接拿来用的。这就导致了,qt的string和char字符串不匹配,程序里面有400多个警告

出0入10汤圆

 楼主| 发表于 2019-9-30 17:36:56 | 显示全部楼层
snkaka 发表于 2019-9-30 16:32
佩服楼主的探索和共享精神

哈哈,我也是看别人的

出0入0汤圆

发表于 2019-9-30 20:59:51 来自手机 | 显示全部楼层
楼主厉害,谢谢分享

出0入0汤圆

发表于 2019-9-30 22:27:05 | 显示全部楼层
赞一个,

出0入0汤圆

发表于 2019-9-30 22:29:10 | 显示全部楼层
落叶知秋 发表于 2019-9-30 16:18
刚好前几天自己手撸了一个MFC上的简单拼音输入模块,原来楼主参考的那个帖子我也收藏了,没想起来,搞得自 ...

freepy31    这个拼音输入法有词组,c语言开源的

出0入0汤圆

发表于 2019-9-30 22:37:51 | 显示全部楼层
字母太小,触摸屏点不太方便吧

出40入42汤圆

发表于 2019-10-1 00:05:24 来自手机 | 显示全部楼层
czg1411 发表于 2019-9-30 22:29
freepy31    这个拼音输入法有词组,c语言开源的

谢谢告知,迟些去学习一下。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-24 19:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表