#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
没有合适的资源?快使用搜索试试~ 我知道了~
CKeyBoard.zip
共31个文件
o:7个
cpp:7个
h:5个
需积分: 5 0 下载量 105 浏览量
2021-09-17
19:50:10
上传
评论
收藏 2.86MB ZIP 举报
温馨提示
虚拟按键,qt下运行,支持交叉编译,全键盘显示
资源详情
资源评论
资源推荐
收起资源包目录
Keyboard.zip (31个子文件)
Keyboard
keyboard.cpp 25KB
Keyboard.pro.user 11KB
ui_keyboard.h 25KB
test.cpp 743B
Makefile.Debug 7KB
data
Option.ini 65B
ziku.dat 19KB
test.ui 1KB
keyboard.qrc 95B
this_config.h 1KB
this_config.cpp 1KB
ui_test.h 2KB
Makefile.Release 7KB
test.h 451B
main.cpp 451B
debug
this_config.o 1.96MB
moc_test.cpp 2KB
moc_keyboard.o 480KB
qrc_keyboard.cpp 12KB
test.o 1.97MB
qrc_keyboard.o 23KB
main.o 1.96MB
moc_keyboard.cpp 8KB
keyboard.o 1.41MB
Keyboard.exe 4.81MB
moc_test.o 1.97MB
Keyboard.pro 449B
Makefile 6KB
ico
Keyboard.png 2KB
keyboard.ui 31KB
release
keyboard.h 4KB
共 31 条
- 1
风清扬搬砖
- 粉丝: 3
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0