#include "keyboard.h"
#include "ui_keyboard.h"
#include <Qt>
#include <QtGui>
#include <QPalette>
#include <qtextedit.h>
#include <QLineEdit>
extern bool n;
Keyboard::Keyboard(QWidget *parent, bool num) :
QMainWindow(parent),
ui(new Ui::Keyboard)
{
ui->setupUi(this);
Flag_InputMode = LETTER; //输入格式变量
Flag_Mid_Mode = LETTER; //输入格式中转变量
m_MouseDown = false; //鼠标事件初始化
m_Page =0;
m_Page_A =0;//初始化总页数和当前页码
k_letter[0]=0;
k_letter[1]=0;
k_letter[2]=0;
k_letter[3]=0;
k_letter[4]=0;
k_letter[5]=0;
k_letter[6]=0;
k_letter_index=0;
m_Display[0] = ui->hz_1;
m_Display[1] = ui->hz_2;
m_Display[2] = ui->hz_3;
m_Display[3] = ui->hz_4;
m_Display[4] = ui->hz_5;
m_Display[5] = ui->hz_6;
m_Display[6] = ui->hz_7;
m_Display[7] = ui->hz_8;
m_Display[8] = ui->hz_9;
m_Display[9] = ui->hz_10;//汉字1-10的定义,将其统一放在一个数组中,方便后续代码。
m_letter_a_z[0]=ui->pushButton_a;
m_letter_a_z[1]=ui->pushButton_b;
m_letter_a_z[2]=ui->pushButton_c;
m_letter_a_z[3]=ui->pushButton_d;
m_letter_a_z[4]=ui->pushButton_e;
m_letter_a_z[5]=ui->pushButton_f;
m_letter_a_z[6]=ui->pushButton_g;
m_letter_a_z[7]=ui->pushButton_h;
m_letter_a_z[8]=ui->pushButton_i;
m_letter_a_z[9]=ui->pushButton_j;
m_letter_a_z[10]=ui->pushButton_k;
m_letter_a_z[11]=ui->pushButton_l;
m_letter_a_z[12]=ui->pushButton_m;
m_letter_a_z[13]=ui->pushButton_n;
m_letter_a_z[14]=ui->pushButton_o;
m_letter_a_z[15]=ui->pushButton_p;
m_letter_a_z[16]=ui->pushButton_q;
m_letter_a_z[17]=ui->pushButton_r;
m_letter_a_z[18]=ui->pushButton_s;
m_letter_a_z[19]=ui->pushButton_t;
m_letter_a_z[20]=ui->pushButton_u;
m_letter_a_z[21]=ui->pushButton_v;
m_letter_a_z[22]=ui->pushButton_w;
m_letter_a_z[23]=ui->pushButton_x;
m_letter_a_z[24]=ui->pushButton_y;
m_letter_a_z[25]=ui->pushButton_z;
setWindowFlags(Qt::Tool|Qt::WindowStaysOnTopHint|Qt::FramelessWindowHint);/*窗口风格设置,这里是去除标题栏即蓝色部分*/
if(num)
{
Flag_InputMode = NUMBER; //输入格式变量
Flag_Mid_Mode = NUMBER; //输入格式中转变量
KeyBoardStartMode(NUMBER);
ui->pushButton_en_ch->setEnabled(false);
ui->pushButton_cap->setEnabled(false);
}
else
{
Flag_InputMode = LETTER; //输入格式变量
Flag_Mid_Mode = LETTER; //输入格式中转变量
KeyBoardStartMode(LETTER); //HANZI
ui->pushButton_en_ch->setEnabled(true);
ui->pushButton_cap->setEnabled(true);
}
QString srf;
QFile file(FILE_ZI_KU);//打开FILE_ZI_KU文件
if (file.open(QFile::ReadOnly))
{
while (true)
{
char buf[1024] = {0};
qint64 Len = file.readLine(buf, sizeof(buf));//读取文件一行
if (Len <= 0) break; //判断是否读取成功,失败即跳出
srf += QString(buf);//将读取的字符流添加到srf中
}
}
m_srf = srf.split("\r\n"); //用QString的split函数将字库文件划分成一段一段,每个拼音对应一段字库
InitKeyBoard();
}
void Keyboard::InitKeyBoard()
{
}
void Keyboard::paintEvent(QPaintEvent *)
{
QPainter dc(this);
QRect r = QRect(0, 0, this->width(), this->height());
Draw3dFrame(r, dc);
}
/*********通过拼音找汉字*************
**QString PinYin 输入的拼音
**QString &Chinese 拼音所对应的汉字
**********************************/
bool Keyboard::FindChinese(QString PinYin, QString &Chinese)
{
QStringList lst;
QString Line;
for(int i=0; i<m_srf.count(); i++)//m_srf.count()QStringList有多少段
{
Line = m_srf.at(i);
if (Line.isEmpty() || PinYin.isEmpty()) continue;
lst = Line.split(",");
if (QString::compare(lst.at(0), PinYin, Qt::CaseInsensitive) == 0)
{
Chinese = lst.at(1);
return true;
}
}
return false;
}
void Keyboard::hanzi_zk_set() //此函数对所取得的字符所对应的汉字按字放在汉字显示框中。
{
QString HzList;
QString Temp;
for (int i=0; i<10; i++)
{
m_Display[i]->setEnabled(false);
m_Display[i]->setText("");
}
if (!FindChinese(m_CurPY, HzList))
{
m_Page_A=0;
ui->pushButton_next->setEnabled(false);
ui->pushButton_pre->setEnabled(false);
return;
}
m_Page_A=(HzList.length()-1)/10; //获得总页数
//此处两个if-else的作用是当翻页button没有功能是,hide它
if (m_Page_A == m_Page)
{
ui->pushButton_next->setEnabled(false);
}
else
{
ui->pushButton_next->setEnabled(true);
}
if ( m_Page_A== 0||m_Page==0)
{
ui->pushButton_pre->setEnabled(false);
}
else
{
ui->pushButton_pre->setEnabled(true);
}
for (int i=m_Page*10; i<HzList.length(); i++)
{
Temp = HzList.at(i);
// Temp = QStringLiteral(Temp);
m_Display[i%10]->setText(Temp);
m_Display[i%10]->setEnabled(true);
if ((i+1) % 10 == 0 && i != 0) break;
}
}
/******************鼠标拖动键盘处理部分*******************************/
void Keyboard::mouseMoveEvent(QMouseEvent *event) //键盘拖动
{
if (event->buttons() == Qt::LeftButton && m_MouseDown)
{
move(event->globalPos() - m_DragPos);
event->accept();
}
}
void Keyboard::mousePressEvent(QMouseEvent *event) //读取键盘左击位置,
{
if (event->button() == Qt::LeftButton)
{
m_DragPos = event->globalPos() - frameGeometry().topLeft();
event->accept();
m_MouseDown = true;
}
}
void Keyboard::mouseReleaseEvent(QMouseEvent *event) //鼠标释放。
{
Q_UNUSED(event);
m_MouseDown = false;
}
//------------------
/*********************通过键盘输入字符QLineEdit********************************/
void Keyboard::Input_letter_to_linEdit(const QString letter)
{
// if(Flag_InputMode==LETTER)
QWidget *q = QApplication::focusWidget();
QLineEdit *e;
QTextEdit *t;
if (q != NULL)
{
e = dynamic_cast<QLineEdit *>(q);//dynamic_cast用于判断q的类型是否为QLineEdit如果是,那么e就为QLineEdit。
if (e != NULL) e->insert(letter);
t = dynamic_cast<QTextEdit *>(q);
if (t != NULL) t->insertPlainText(letter);
}
}
//Input_letter_to_linEdit--end
/*******存储输入的字符到拼音框中********************************/
void Keyboard::get_key_letter(QString letter)
{
m_Page=0;
if(k_letter_index++<6)
{
m_CurPY = m_CurPY + letter;
}
ui-> pinyin ->setText(m_CurPY);//要用ui指向前面所定义的指针
hanzi_zk_set();
//清当前页为0
}
//get_key_letter____end
void Keyboard::on_pushButton_esc_clicked()
{
// ui-> pushButton_en_ch->setText("中文");
// Flag_InputMode=HANZI;
// m_CurPY="";
// ui-> pinyin ->setText(m_CurPY);//要用ui指向前面所定义的指针
// hanzi_zk_set();
// //修改一些button
// ui->pushButton_sign_tan->setText("!");
// ui->pushButton_sign_wen->setText("?");
// ui->pushButton_sign_dou->setText(",");
// ui->pushButton_sign_ju->setText("。");
// ui->pushButton_sign_fen->setText(";");
// for(int i=0;i<26;i++)
// {
// m_letter_a_z[i]->setEnabled(true);
// }
close();
}
void Keyboard::on_pushButton_en_ch_clicked()//中英切换button
{
if(Flag_InputMode==HANZI)
{
KeyBoardLetterMode();
}
else if(Flag_InputMode==LETTER)
{
KeyBoardNumMode();
}
else if(Flag_InputMode==NUMBER)
{
KeyBoardHanziMode();
}
}
void Keyboard::on_pushButton_cap_clicked()//大小写字母输入切换
{
//初始化汉字部分的button
clean_piy_and_hanzi_while_clicked();
char
评论30