You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

254 lines
5.9 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "keyboard.h"
#include "ui_keyboard.h"
#include "mainwindow.h"
#include <QDebug>
#include <QMessageBox>
#include <QFile>
bool KeyBoard_Code=false,keyBoard_flag=false;
KeyBoard::KeyBoard(QWidget *parent, QLineEdit *LineEdit) :
QDialog(parent),
ui(new Ui::KeyBoard)
{
ui->setupUi(this);
this->setWindowTitle( tr("键盘") );
keyBoard_flag=true;
ui->label->lower();
isCap = false;
outputStr = "";
lineEdit = LineEdit;
pageAll = 0;
curPage = 0;
numGroup = new QButtonGroup();
numGroup->addButton(ui->num_0_Bt, 0);
numGroup->addButton(ui->num_1_Bt, 1);
numGroup->addButton(ui->num_2_Bt, 2);
numGroup->addButton(ui->num_3_Bt, 3);
numGroup->addButton(ui->num_4_Bt, 4);
numGroup->addButton(ui->num_5_Bt, 5);
numGroup->addButton(ui->num_6_Bt, 6);
numGroup->addButton(ui->num_7_Bt, 7);
numGroup->addButton(ui->num_8_Bt, 8);
numGroup->addButton(ui->num_9_Bt, 9);
numGroup->addButton(ui->dian, 10);
connect( numGroup, SIGNAL(buttonClicked(QAbstractButton*)),
this, SLOT(slot_numClicked(QAbstractButton*)) );
carGroup = new QButtonGroup();
connect( carGroup, SIGNAL(buttonClicked(QAbstractButton*)),
this, SLOT(slot_carClicked(QAbstractButton*)) );
carList = carGroup->buttons();
hanziGroup = new QButtonGroup();
connect( hanziGroup, SIGNAL(buttonClicked(QAbstractButton*)),
this, SLOT(slot_hanziBtClicked(QAbstractButton*)));
zhList = hanziGroup->buttons();
ui->showLb->setText(lineEdit->text());
}
KeyBoard::~KeyBoard()
{
delete ui;
if(numGroup != nullptr)
{
delete numGroup;
numGroup = nullptr;
}
if(carGroup != nullptr)
{
delete carGroup;
carGroup = nullptr;
}
if(hanziGroup != nullptr)
{
delete hanziGroup;
hanziGroup = nullptr;
}
}
/* 加载字库 */
void KeyBoard::loadziku()
{
// 加载字库文件
QFile zikuFile(":/ziku1/ziku.dat");
if ( !zikuFile.open(QIODevice::ReadOnly | QIODevice::Text) )
{
QMessageBox::information(this, "键盘字库",
"加载字库文件错误,中文输入不可用!", QMessageBox::Ok);
//ui->zh_us_Bt->setEnabled(false);
return;
}
QString zikuAll;
while (true)
{
char buf[1024];
qint64 len = zikuFile.readLine(buf, sizeof(buf));
if (len <= 0)
{
break;
}
QString str = QString::fromLocal8Bit(buf);
zikuAll += str;
}
zikuList = zikuAll.split("\n"); //用QString的split函数将字库文件划分成一段一段每个拼音对应一段字库
zikuFile.close();
}
/* 查找中文 */
QString KeyBoard::findChinese(QString PinYin)
{
QStringList lst;
QString Line;
QString returnChinese;
for(int i = 0; i < zikuList.count(); i++)//m_srf.count()QStringList有多少段
{
Line = zikuList.at(i);
if (Line.isEmpty() || PinYin.isEmpty()) continue;
lst = Line.split(",");
if (QString::compare(lst.at(0), PinYin, Qt::CaseInsensitive) == 0)
{
returnChinese = lst.at(1);
}
}
// 字符串分割成10个10个一组
pageList.clear();
int len = returnChinese.length();
if (len > 0)
{
pageAll = len % 10 == 0 ? len/10 : (len/10) + 1;
QString str;
for (int i = 1; i <= len; i++)
{
str += returnChinese.at(i-1);
if (i % 10 == 0 && i != 0)
{
pageList << str;
str = "";
}
}
if (len % 10 != 0)
{
pageList << returnChinese.right(len % 10);
}
}//if
return returnChinese;
}
/* 汉字按钮的设置 */
void KeyBoard::setHanziBt()
{
for (int i = 0; i < 10; i++)
{
zhList.at(i)->setText("");
}
QString PinYin = ui->showLb->text();
ui->showLb->raise();
QString ChineseStr = findChinese(PinYin);
if (ChineseStr != "")
{
int ChineseStrCount = ChineseStr.length();
// 10字以内汉字个数
if (ChineseStrCount <= 10)
{
for (int i = 0; i < ChineseStrCount; i++)
{
((QPushButton *)zhList.at(i))->setText(ChineseStr.at(i));
}
return;
}
// 大于十字
for (int i = 0; i < 10; i++)
{
((QPushButton *)zhList.at(i))->setText(ChineseStr.at(i));
}
}//if
}
/* 数字键盘点击 */
void KeyBoard::slot_numClicked(QAbstractButton *bt)
{
QPushButton *tmpBt = (QPushButton *)bt;
QString str = lineEdit->text();
str.append(tmpBt->text());
lineEdit->setText(str);
QString str_1 = ui->showLb->text();
str_1.append(tmpBt->text());
ui->showLb->setText(str_1);
ui->showLb->raise();
}
/* 字母键点击 */
void KeyBoard::slot_carClicked(QAbstractButton *bt)
{
QPushButton *tmp = (QPushButton *)bt;
QString str_1 = ui->showLb->text();
str_1.append(tmp->text());
ui->showLb->setText(str_1);
ui->showLb->raise();
}
/* 十个中文按钮点击 */
void KeyBoard::slot_hanziBtClicked(QAbstractButton *bt)
{
QPushButton *tmp = (QPushButton *)bt;
QString str = lineEdit->text();
str.append(tmp->text());
lineEdit->setText(str);
ui->showLb->setText("");
ui->showLb->raise();
for (int i = 0; i < 10; i++)
{
zhList.at(i)->setText("");
}
}
/* 退格键 */
void KeyBoard::on_delBt_clicked()
{
QString tmp = ui->showLb->text();
ui->showLb->setText(tmp.left(tmp.length() - 1));
ui->showLb->raise();
if (1)
{
QString str = lineEdit->text();
lineEdit->setText(str.left(str.length() - 1));
}
}
void KeyBoard::on_closeBt_clicked()
{
KeyBoard_Code=false;
keyBoard_flag=false;
delete this;
}
void KeyBoard::closeEvent(QCloseEvent *e)
{
e->accept();
KeyBoard_Code=false;
keyBoard_flag=false;
delete this;
}