3合1网站建设,简单美食网站模板免费下载,wordpress网址重定向,网站动画特效使用Qt中实现中英文键盘#xff0c;支持各种linux嵌入式设备。 实现思路#xff1a;需要一个中文字体库#xff0c;将字体库加载到一个Hash容器#xff0c;字母和拼音作为key值#xff0c;对应的中文作为value值。 核心代码#xff1a;
#include UKeyBoard.h支持各种linux嵌入式设备。 实现思路需要一个中文字体库将字体库加载到一个Hash容器字母和拼音作为key值对应的中文作为value值。 核心代码
#include UKeyBoard.h
#include ui_UKeyBoard.h
#include QFile
#include QKeyEvent
#include QDebugUKeyBoard::UKeyBoard(QWidget *parent) :QWidget(parent),ui(new Ui::UKeyBoard)
{ui-setupUi(this);QFile* file new QFile(QApplication::applicationDirPath()/PinYin_Chinese.txt);file-open(QIODevice::ReadOnly);QString sss QString::fromUtf8(file-readAll());qDebug()sss.size();QStringList ssslist sss.split(\r\n);foreach (QString var, ssslist) {QStringList pinyin var.mid(1,var.size() - 1).split( );QString word var.mid(0,1);for (int i 0; i pinyin.size(); i) {if (m_wordHash.find(pinyin[i]) m_wordHash.end())m_wordHash.insert(pinyin[i],QStringList()word);elsem_wordHash[pinyin[i]].append(word);}}connectInit();
}UKeyBoard::~UKeyBoard()
{delete ui;
}void UKeyBoard::connectInit()
{connect(ui-Key_Q_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_W_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_E_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_R_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_T_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_Y_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_U_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_I_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_O_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_P_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_A_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_S_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_D_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_F_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_G_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_H_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_J_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_K_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_L_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_Z_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_X_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_C_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_V_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_B_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_N_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-Key_M_Btn,QToolButton::clicked,this,UKeyBoard::slotKeyBtn);connect(ui-wordBtn1,QToolButton::clicked,this,UKeyBoard::slotInputChange);connect(ui-wordBtn2,QToolButton::clicked,this,UKeyBoard::slotInputChange);connect(ui-wordBtn3,QToolButton::clicked,this,UKeyBoard::slotInputChange);connect(ui-wordBtn4,QToolButton::clicked,this,UKeyBoard::slotInputChange);connect(ui-wordBtn5,QToolButton::clicked,this,UKeyBoard::slotInputChange);connect(ui-wordBtn6,QToolButton::clicked,this,UKeyBoard::slotInputChange);connect(ui-wordBtn7,QToolButton::clicked,this,UKeyBoard::slotInputChange);
}
//输入中文
void UKeyBoard::slotInputChange()
{QToolButton* btn (QToolButton*)sender();QString value btn-text();QKeyEvent *key new QKeyEvent(QEvent::KeyPress, w, Qt::NoModifier, value.split( ).last());//通过postEvent将事件key的文本内容发送出去QApplication::focusWidget()当前窗口中有光标的控件上QApplication::postEvent(ui-inputEdit-focusWidget(), key); //_currentLineEditm_curWords.clear();ui-selectWordEdit-setText();ui-selectWordEdit-hide();ui-wordBtn1-setText();ui-wordBtn2-setText();ui-wordBtn3-setText();ui-wordBtn4-setText();ui-wordBtn5-setText();ui-wordBtn6-setText();ui-wordBtn7-setText();
}
//上一页中文
void UKeyBoard::on_lastPageBtn_clicked()
{if (_index 0)_index--;QString val ui-selectWordEdit-text();wordChange(val,_index);
}
//下一页中文
void UKeyBoard::on_nextPageBtn_clicked()
{_index;QString val ui-selectWordEdit-text();if (wordChange(val,_index) 0)_index--;
}
//按键输入
void UKeyBoard::slotKeyBtn()
{QToolButton* btn (QToolButton*)sender();ui-inputEdit-setFocus();if (_keyType 0){QString val ui-selectWordEdit-text();int position ui-selectWordEdit-cursorPosition();val.insert(position,btn-text());ui-selectWordEdit-setText(val);m_curWords.clear();m_curWords.append(m_wordHash.value(val));for (QHashQString,QStringList::const_iterator it m_wordHash.begin(); it ! m_wordHash.end();it) {if (it.key().indexOf(val) 0){if (it.key() val)continue;m_curWords.append(it.value());}}wordChange(val,0);updateSelectInputPos();}else{QString value btn-text();QKeyEvent *key new QKeyEvent(QEvent::KeyPress, w, Qt::NoModifier, value);//通过postEvent将事件key的文本内容发送出去QApplication::focusWidget()当前窗口中有光标的控件上QApplication::postEvent(ui-inputEdit-focusWidget(), key); //_currentLineEdit}}
//更新编辑框大小和状态
void UKeyBoard::updateSelectInputPos()
{if (!ui-selectWordEdit-text().isEmpty()){ui-selectWordEdit-setFocus();ui-selectWordEdit-show();QFontMetrics _metrics(ui-inputEdit-font());QFontMetrics _metrics1(ui-selectWordEdit-font());QString inputVal ui-inputEdit-text().mid(0,ui-inputEdit-cursorPosition());int inputPos 5_metrics.width(inputVal)ui-inputEdit-x();ui-selectWordEdit-setGeometry(inputPos,ui-inputEdit-y()3,_metrics1.width(ui-selectWordEdit-text())6,36);}else{ui-inputEdit-setFocus();ui-selectWordEdit-clear();ui-selectWordEdit-hide();}
}
//中文检索
int UKeyBoard::wordChange(QString val,int index)
{_index index;if (m_curWords.size() 7*index)return -1;ui-wordBtn1-setText();ui-wordBtn2-setText();ui-wordBtn3-setText();ui-wordBtn4-setText();ui-wordBtn5-setText();ui-wordBtn6-setText();ui-wordBtn7-setText();if (m_curWords.size()7*index)ui-wordBtn1-setText(1 m_curWords[7*index]);if (m_curWords.size()7*index1)ui-wordBtn2-setText(2 m_curWords[7*index1]);if (m_curWords.size()7*index2)ui-wordBtn3-setText(3 m_curWords[7*index2]);if (m_curWords.size()7*index3)ui-wordBtn4-setText(4 m_curWords[7*index3]);if (m_curWords.size()7*index4)ui-wordBtn5-setText(5 m_curWords[7*index4]);if (m_curWords.size()7*index5)ui-wordBtn6-setText(6 m_curWords[7*index5]);if (m_curWords.size()7*index6)ui-wordBtn7-setText(7 m_curWords[7*index6]);return 0;
}
//大小写切换
void UKeyBoard::on_capsBtn_clicked()
{if (!_capsType)_capsType true;else_capsType false;if (_keyType 1){if (_capsType){changeKeyType(2);}else{changeKeyType(1);}}else if (_keyType 2){if (_capsType){changeKeyType(4);}else{changeKeyType(3);}}else if (_keyType 0){QString val ui-inputEdit-text();int position ui-inputEdit-cursorPosition();QString wordVal ui-wordBtn1-text().split( ).last();if (wordVal.isEmpty())wordVal ui-selectWordEdit-text();val.insert(position,wordVal,);ui-inputEdit-setText(val);ui-inputEdit-setCursorPosition(positionwordVal.size()1);}ui-inputEdit-setFocus();ui-selectWordEdit-clear();ui-selectWordEdit-hide();ui-wordBtn1-setText();ui-wordBtn2-setText();ui-wordBtn3-setText();ui-wordBtn4-setText();ui-wordBtn5-setText();ui-wordBtn6-setText();ui-wordBtn7-setText();
}
//删除字符
void UKeyBoard::on_delBtn_clicked()
{QString val ui-selectWordEdit-text();if (!val.isEmpty()){int cursorPosition ui-selectWordEdit-cursorPosition()-1;val.remove(cursorPosition,1);ui-selectWordEdit-setText(val);ui-selectWordEdit-setCursorPosition(cursorPosition);m_curWords.clear();m_curWords.append(m_wordHash.value(val));for (QHashQString,QStringList::const_iterator it m_wordHash.begin(); it ! m_wordHash.end();it) {if (it.key().indexOf(val) 0){if (it.key() val)continue;m_curWords.append(it.value());}}wordChange(val,0);if (val.isEmpty()){ui-wordBtn1-setText();ui-wordBtn2-setText();ui-wordBtn3-setText();ui-wordBtn4-setText();ui-wordBtn5-setText();ui-wordBtn6-setText();ui-wordBtn7-setText();ui-selectWordEdit-hide();ui-inputEdit-setFocus();}}else{val ui-inputEdit-text();int cursorPosition ui-inputEdit-cursorPosition()-1;val.remove(cursorPosition,1);ui-inputEdit-setText(val);ui-inputEdit-setCursorPosition(cursorPosition);}updateSelectInputPos();
}
//切换键盘类型
void UKeyBoard::on_swithBtn_clicked()
{if (_keyType 0)_keyType 1;else if (_keyType 1)_keyType 2;else if (_keyType 2)_keyType 0;_capsType false;if (_keyType 0){changeKeyType(0);ui-swithBtn-setText(EN);}else if (_keyType 1){changeKeyType(1);ui-swithBtn-setText(123);}else{changeKeyType(3);ui-swithBtn-setText(CN);}ui-inputEdit-setFocus();ui-selectWordEdit-clear();ui-selectWordEdit-hide();
}
//空格
void UKeyBoard::on_spaceBtn_clicked()
{int position ui-inputEdit-cursorPosition();QString val ui-inputEdit-text();if (_keyType 0){QString wordVal ui-wordBtn1-text().split( ).last();if (wordVal.isEmpty())wordVal ui-selectWordEdit-text();val.insert(position,wordVal );ui-inputEdit-setText(val);ui-inputEdit-setCursorPosition(positionwordVal.size()1);}else{val.insert(position, );ui-inputEdit-setText(val);ui-inputEdit-setCursorPosition(position1);}ui-inputEdit-setFocus();ui-selectWordEdit-clear();ui-selectWordEdit-hide();ui-wordBtn1-setText();ui-wordBtn2-setText();ui-wordBtn3-setText();ui-wordBtn4-setText();ui-wordBtn5-setText();ui-wordBtn6-setText();ui-wordBtn7-setText();
}
//光标左移
void UKeyBoard::on_leftMoveBtn_clicked()
{if (ui-selectWordEdit-text().isEmpty()){if (ui-inputEdit-cursorPosition()-1 0)ui-inputEdit-setCursorPosition(ui-inputEdit-text().size());elseui-inputEdit-setCursorPosition(ui-inputEdit-cursorPosition()-1);}else{if (ui-selectWordEdit-cursorPosition()-1 0)ui-selectWordEdit-setCursorPosition(ui-selectWordEdit-text().size());elseui-selectWordEdit-setCursorPosition(ui-selectWordEdit-cursorPosition()-1);}
}//光标右移
void UKeyBoard::on_rightMoveBtn_clicked()
{if (ui-selectWordEdit-text().isEmpty()){if (ui-inputEdit-cursorPosition()1 ui-inputEdit-text().size())ui-inputEdit-setCursorPosition(0);elseui-inputEdit-setCursorPosition(ui-inputEdit-cursorPosition()1);}else{if (ui-selectWordEdit-cursorPosition()1 ui-selectWordEdit-text().size())ui-selectWordEdit-setCursorPosition(0);elseui-selectWordEdit-setCursorPosition(ui-selectWordEdit-cursorPosition()1);}
}void UKeyBoard::on_enterBtn_clicked()
{this-hide();
}//切换键盘类型
void UKeyBoard::changeKeyType(int type)
{ui-selectWordEdit-setText();ui-wordBtn1-setText();ui-wordBtn2-setText();ui-wordBtn3-setText();ui-wordBtn4-setText();ui-wordBtn5-setText();ui-wordBtn6-setText();ui-wordBtn7-setText();if (type 0){_capsType false;ui-Key_A_Btn-setText(a);ui-Key_S_Btn-setText(s);ui-Key_D_Btn-setText(d);ui-Key_F_Btn-setText(f);ui-Key_G_Btn-setText(g);ui-Key_H_Btn-setText(h);ui-Key_J_Btn-setText(j);ui-Key_K_Btn-setText(k);ui-Key_L_Btn-setText(l);ui-Key_Q_Btn-setText(q);ui-Key_W_Btn-setText(w);ui-Key_E_Btn-setText(e);ui-Key_R_Btn-setText(r);ui-Key_T_Btn-setText(t);ui-Key_Y_Btn-setText(y);ui-Key_U_Btn-setText(u);ui-Key_I_Btn-setText(i);ui-Key_O_Btn-setText(o);ui-Key_P_Btn-setText(p);ui-Key_Z_Btn-setText(z);ui-Key_X_Btn-setText(x);ui-Key_C_Btn-setText(c);ui-Key_V_Btn-setText(v);ui-Key_B_Btn-setText(b);ui-Key_N_Btn-setText(n);ui-Key_M_Btn-setText(m);ui-capsBtn-setIcon(QIcon());ui-capsBtn-setText(.);}else if (type 1){_capsType false;ui-Key_A_Btn-setText(a);ui-Key_S_Btn-setText(s);ui-Key_D_Btn-setText(d);ui-Key_F_Btn-setText(f);ui-Key_G_Btn-setText(g);ui-Key_H_Btn-setText(h);ui-Key_J_Btn-setText(j);ui-Key_K_Btn-setText(k);ui-Key_L_Btn-setText(l);ui-Key_Q_Btn-setText(q);ui-Key_W_Btn-setText(w);ui-Key_E_Btn-setText(e);ui-Key_R_Btn-setText(r);ui-Key_T_Btn-setText(t);ui-Key_Y_Btn-setText(y);ui-Key_U_Btn-setText(u);ui-Key_I_Btn-setText(i);ui-Key_O_Btn-setText(o);ui-Key_P_Btn-setText(p);ui-Key_Z_Btn-setText(z);ui-Key_X_Btn-setText(x);ui-Key_C_Btn-setText(c);ui-Key_V_Btn-setText(v);ui-Key_B_Btn-setText(b);ui-Key_N_Btn-setText(n);ui-Key_M_Btn-setText(m);ui-capsBtn-setIcon(QIcon(:/img/keyboard-up_1.png));ui-capsBtn-setIconSize(QSize(28,33));ui-capsBtn-setText();}else if (type 2){ui-Key_A_Btn-setText(A);ui-Key_S_Btn-setText(S);ui-Key_D_Btn-setText(D);ui-Key_F_Btn-setText(F);ui-Key_G_Btn-setText(G);ui-Key_H_Btn-setText(H);ui-Key_J_Btn-setText(J);ui-Key_K_Btn-setText(K);ui-Key_L_Btn-setText(L);ui-Key_Q_Btn-setText(Q);ui-Key_W_Btn-setText(W);ui-Key_E_Btn-setText(E);ui-Key_R_Btn-setText(R);ui-Key_T_Btn-setText(T);ui-Key_Y_Btn-setText(Y);ui-Key_U_Btn-setText(U);ui-Key_I_Btn-setText(I);ui-Key_O_Btn-setText(O);ui-Key_P_Btn-setText(P);ui-Key_Z_Btn-setText(Z);ui-Key_X_Btn-setText(X);ui-Key_C_Btn-setText(C);ui-Key_V_Btn-setText(V);ui-Key_B_Btn-setText(B);ui-Key_N_Btn-setText(N);ui-Key_M_Btn-setText(M);ui-capsBtn-setIcon(QIcon(:/img/keyboard-up.png));ui-capsBtn-setIconSize(QSize(28,33));ui-capsBtn-setText();}else if (type 3){ui-Key_A_Btn-setText(-);ui-Key_S_Btn-setText();ui-Key_D_Btn-setText();ui-Key_F_Btn-setText(/);ui-Key_G_Btn-setText(\\);ui-Key_H_Btn-setText(;);ui-Key_J_Btn-setText();ui-Key_K_Btn-setText(,);ui-Key_L_Btn-setText(.);ui-Key_Q_Btn-setText(1);ui-Key_W_Btn-setText(2);ui-Key_E_Btn-setText(3);ui-Key_R_Btn-setText(4);ui-Key_T_Btn-setText(5);ui-Key_Y_Btn-setText(6);ui-Key_U_Btn-setText(7);ui-Key_I_Btn-setText(8);ui-Key_O_Btn-setText(9);ui-Key_P_Btn-setText(0);ui-Key_Z_Btn-setText([);ui-Key_X_Btn-setText(]);ui-Key_C_Btn-setText(‘);ui-Key_V_Btn-setText(...);ui-Key_B_Btn-setText();ui-Key_N_Btn-setText(。);ui-Key_M_Btn-setText(、);ui-capsBtn-setIcon(QIcon());ui-capsBtn-setText(#);}else if (type 4){ui-Key_A_Btn-setText(!);ui-Key_S_Btn-setText();ui-Key_D_Btn-setText(#);ui-Key_F_Btn-setText($);ui-Key_G_Btn-setText(%);ui-Key_H_Btn-setText(^);ui-Key_J_Btn-setText();ui-Key_K_Btn-setText(*);ui-Key_L_Btn-setText(();ui-Key_Q_Btn-setText());ui-Key_W_Btn-setText(_);ui-Key_E_Btn-setText(°);ui-Key_R_Btn-setText({);ui-Key_T_Btn-setText(});ui-Key_Y_Btn-setText(|);ui-Key_U_Btn-setText(:);ui-Key_I_Btn-setText(\);ui-Key_O_Btn-setText();ui-Key_P_Btn-setText();ui-Key_Z_Btn-setText(?);ui-Key_X_Btn-setText(~);ui-Key_C_Btn-setText(”);ui-Key_V_Btn-setText(“);ui-Key_B_Btn-setText(《);ui-Key_N_Btn-setText(》);ui-Key_M_Btn-setText(—);ui-capsBtn-setIcon(QIcon());ui-capsBtn-setText(123);}
}
完整源码