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.

321 lines
7.5 KiB
C++

#include "keyboard_ABC.h"
#include "ui_keyboard_ABC.h"
#include "mainwindow.h"
#include <QDebug>
#include <QMessageBox>
#include <QFile>
bool KeyBoard_ABC_Code=false,keyBoard_ABC_flag=false;
KeyBoard_ABC::KeyBoard_ABC(QWidget *parent, QLineEdit *LineEdit) :
QDialog(parent),
ui(new Ui::KeyBoard_ABC)
{
ui->setupUi(this);
this->setWindowTitle( tr("键盘") );
keyBoard_ABC_flag=true;
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);
connect( numGroup, SIGNAL(buttonClicked(QAbstractButton*)),
this, SLOT(slot_numClicked(QAbstractButton*)) );
carGroup = new QButtonGroup();
carGroup->addButton(ui->q_Bt, 1);
carGroup->addButton(ui->w_Bt, 2);
carGroup->addButton(ui->e_Bt, 3);
carGroup->addButton(ui->r_Bt, 4);
carGroup->addButton(ui->t_Bt, 5);
carGroup->addButton(ui->y_Bt, 6);
carGroup->addButton(ui->u_Bt, 7);
carGroup->addButton(ui->i_Bt, 8);
carGroup->addButton(ui->o_Bt, 9);
carGroup->addButton(ui->p_Bt, 10);
carGroup->addButton(ui->a_Bt, 11);
carGroup->addButton(ui->s_Bt, 12);
carGroup->addButton(ui->d_Bt, 13);
carGroup->addButton(ui->f_Bt, 14);
carGroup->addButton(ui->g_Bt, 15);
carGroup->addButton(ui->h_Bt, 16);
carGroup->addButton(ui->j_Bt, 17);
carGroup->addButton(ui->k_Bt, 18);
carGroup->addButton(ui->l_Bt, 19);
carGroup->addButton(ui->z_Bt, 20);
carGroup->addButton(ui->x_Bt, 21);
carGroup->addButton(ui->c_Bt, 22);
carGroup->addButton(ui->v_Bt, 23);
carGroup->addButton(ui->b_Bt, 24);
carGroup->addButton(ui->n_Bt, 25);
carGroup->addButton(ui->m_Bt, 26);
carGroup->addButton(ui->Bt_hengxian, 27);
carGroup->addButton(ui->Bt_dian, 28);
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_ABC::~KeyBoard_ABC()
{
delete ui;
if(numGroup != nullptr)
{
delete numGroup;
numGroup = nullptr;
}
if(carGroup != nullptr)
{
delete carGroup;
carGroup = nullptr;
}
if(hanziGroup != nullptr)
{
delete hanziGroup;
hanziGroup = nullptr;
}
}
/* 查找中文 */
QString KeyBoard_ABC::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_ABC::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_ABC::on_caps_Bt_clicked()
{
if (isCap == false) // 小写状态
{
for (int i = 0; i < carList.size(); i++)
{
QString upper = carList.at(i)->text().toUpper();
carList.at(i)->setText(upper);
}
isCap = true;
return;
}
else // 大写状态
{
for (int i = 0; i < carList.size(); i++)
{
QString lower = carList.at(i)->text().toLower();
carList.at(i)->setText(lower);
}
isCap = false;
return;
}
}
/* 数字键盘点击 */
void KeyBoard_ABC::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_ABC::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();
if (1)
{
QString str_2 = lineEdit->text();
str_2.append(tmp->text());
lineEdit->setText(str_2);
}
}
/* 十个中文按钮点击 */
void KeyBoard_ABC::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_ABC::on_delBt_clicked()
{
QString tmp = ui->showLb->text();
ui->showLb->setText(tmp.left(tmp.length() - 1));
if (1)
{
QString str = lineEdit->text();
lineEdit->setText(str.left(str.length() - 1));
}
}
/* 翻页按键 */
void KeyBoard_ABC::on_nextBt_clicked()
{
curPage++;
if (curPage > pageAll)
{
curPage = 1;
}
for (int i = 0; i < 10; i++)
{
zhList.at(i)->setText("");
}
QString str = pageList.at(curPage-1);
for (int i = 0; i < str.length(); i++)
{
zhList.at(i)->setText(str.at(i));
}
}
void KeyBoard_ABC::on_prevBt_clicked()
{
curPage--;
if (curPage == 0)
{
curPage = pageAll;
}
for (int i = 0; i < 10; i++)
{
zhList.at(i)->setText("");
}
QString str = pageList.at(curPage-1);
for (int i = 0; i < str.length(); i++)
{
zhList.at(i)->setText(str.at(i));
}
}
void KeyBoard_ABC::on_closeBt_clicked()
{
KeyBoard_ABC_Code=false;
keyBoard_ABC_flag=false;
delete this;
}
void KeyBoard_ABC::closeEvent(QCloseEvent *e)
{
e->accept();
KeyBoard_ABC_Code=false;
keyBoard_ABC_flag=false;
delete this;
}