下载资源后端资源详情
inputnew.zip
大小:98.56KB
价格:11积分
下载量:0
评分:
5.0
上传者:weixin_48268336
更新日期:2025-09-22

Qt 软键盘(虚拟键盘) 可直接编译,嵌入式使用

资源文件列表(大概)

文件名
大小
untitled7/
-
untitled7/inputnew/
-
untitled7/inputnew/frminputnew.cpp
39.74KB
untitled7/inputnew/frminputnew.h
4.57KB
untitled7/inputnew/frminputnew.ui
37.35KB
untitled7/inputnew/image/
-
untitled7/inputnew/image/close_black.png
490B
untitled7/inputnew/image/close_white.png
561B
untitled7/inputnew/image/delete_black.png
398B
untitled7/inputnew/image/delete_white.png
486B
untitled7/inputnew/image/enter_black.png
362B
untitled7/inputnew/image/enter_white.png
399B
untitled7/inputnew/image/handwriting_black.png
427B
untitled7/inputnew/image/handwriting_white.png
468B
untitled7/inputnew/image/mini_black.png
398B
untitled7/inputnew/image/mini_white.png
426B
untitled7/inputnew/image/space_black.png
217B
untitled7/inputnew/image/space_white.png
165B
untitled7/inputnew/image/status_ch.png
1.78KB
untitled7/inputnew/image/status_en.png
1.87KB
untitled7/inputnew/image/upper_black.png
390B
untitled7/inputnew/image/upper_white.png
387B
untitled7/inputnew/inputnew.pri
146B
untitled7/inputnew/inputnew.qrc
773B
untitled7/inputnew/py.db
120KB
untitled7/main.cpp
605B
untitled7/mainwindow.cpp
831B
untitled7/mainwindow.h
409B
untitled7/mainwindow.ui
2.26KB
untitled7/untitled7.pro
1.04KB
untitled7/untitled7.pro.user
45.66KB
untitled7/untitled7.pro.user.f2bc2be
22KB

资源内容介绍

软键盘在Qt工程中已经封装为子工程,demo工程可以直接跑通,亲测。包括inputnew.h里面有每个函数的注解,适合Qt嵌入式的开发者学习使用。键盘是自适应的
#pragma execution_character_set("utf-8")#include "frminputnew.h"#include "ui_frminputnew.h"frmInputNew *frmInputNew::self = NULL;frmInputNew *frmInputNew::Instance(){ if (!self) { static QMutex mutex; QMutexLocker locker(&mutex); if (!self) { self = new frmInputNew; } } return self;}frmInputNew::frmInputNew(QWidget *parent) : QWidget(parent), ui(new Ui::frmInputNew){ //修改1:只有数字键盘和字母键盘,数字键盘大小(320x320),字母键盘大小(500x320) //widgetMain控件改成stackedWidgetMain,添加字母键盘UI和数字键盘UI //修改2:widgetTop控件隐藏 ui->setupUi(this); this->initProperty(); this->initForm(); QTimer::singleShot(1000, this, SLOT(initDb()));}frmInputNew::~frmInputNew(){ timerPress->stop(); delete ui;}void frmInputNew::mouseMoveEvent(QMouseEvent *e){ if (mousePressed && (e->buttons() && Qt::LeftButton)) { this->move(e->globalPos() - mousePoint); e->accept(); }}void frmInputNew::mousePressEvent(QMouseEvent *e){ if (e->button() == Qt::RightButton) { mousePressed = true; mousePoint = e->globalPos() - this->pos(); e->accept(); }}void frmInputNew::mouseReleaseEvent(QMouseEvent *){ mousePressed = false;}//事件过滤器,用于识别鼠标单击汉字标签处获取对应汉字bool frmInputNew::eventFilter(QObject *obj, QEvent *event){ if (event->type() == QEvent::MouseButtonPress) { QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event); if (mouseEvent->button() == Qt::LeftButton) { if (obj == ui->labCh1) { setChinese(0); } else if (obj == ui->labCh2) { setChinese(1); } else if (obj == ui->labCh3) { setChinese(2); } else if (obj == ui->labCh4) { setChinese(3); } else if (obj == ui->labCh5) { setChinese(4); } else if (currentEditType != "" && obj != ui->btnClose) { QString objName = obj->objectName(); //qDebug()<<"objName:"<<objName; if (obj->parent() != 0x0 && !obj->property("noinput").toBool() && objName != "frmMainWindow" && objName != "frmInputWindow" && objName != "qt_edit_menu" && objName != "labPY" && objName != "stackedWidgetMain") { if (obj->inherits("QGroupBox") || obj->inherits("QFrame") || obj->inherits("QMenu")) { this->hide(); } else { showPanel(); } } } btnPress = (QPushButton *)obj; if (checkPress()) { isPress = true; timerPress->start(500); } return false; } } else if (event->type() == QEvent::MouseButtonRelease) { btnPress = (QPushButton *)obj; if (checkPress()) { btnPress->setAttribute(Qt::WA_UnderMouse, false); QHoverEvent hoverEvent(QEvent::HoverLeave, QPoint(4, 4), QPoint(0, 0)); QApplication::sendEvent(btnPress, &hoverEvent); isPress = false; timerPress->stop(); } return false; } else if (event->type() == QEvent::KeyPress) { //如果输入法窗体不可见,则不需要处理 if (!isVisible() && !mini) { return QWidget::eventFilter(obj, event); } QString labText = ui->labPY->text(); QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event); //Shift切换输入法模式,esc键关闭输入法面板,空格取第一个汉字,退格键删除 //中文模式下回车键取拼音,中文模式下当没有拼音时可以输入空格 if (keyEvent->key() == Qt::Key_Space) { if (labText != "") { ui->labPY->setText(""); setChinese(0); return true; } else { return false; } } else if (keyEvent->key() == Qt::Key_Return || keyEvent->key() == Qt::Key_Enter) { if (labText != "") { insertValue(labText); ui->labPY->setText(""); selectChinese(); } else { this->setVisible(false); } return true; } else if (keyEvent->key() == Qt::Key_Control) { if (mini) { ui->btnType->click(); return true; } } else if (keyEvent->key() == Qt::Key_Shift) { if (!mini) { ui->btnType->click(); return true; } } else if (keyEvent->key() == Qt::Key_Escape) { ui->btnClose->click(); return true; } else if (keyEvent->key() == Qt::Key_Backspace) { if (inputType == "chinese") { QString txt = labText; int len = txt.length(); if (len > 0) { ui->labPY->setText(txt.left(len - 1)); selectChinese(); return true; } } } else if (keyEvent->key() == Qt::Key_CapsLock) { ui->btnUpper->click(); return true; } else if (keyEvent->text() == "+" || keyEvent->text() == "=") { if (labText != "") { ui->btnNext->click(); return true; } else { return false; } } else if (keyEvent->text() == "-" || keyEvent->text() == "_") { if (labText != "") { ui->btnPre->click(); return true; } else { return false; } } else { if (currentEditType == "QWidget") { return false; } QString key; if (inputType == "chinese") { key = keyEvent->text(); } else if (inputType == "english") { if (upper) { key = keyEvent->text().toUpper(); } else { key = keyEvent->text().toLower(); } } if (!key.isEmpty()) { QList<QPushButton *> btn = this->findChildren<QPushButton *>(); foreach (QPushButton *b, btn) { QString text = b->text(); if (!text.isEmpty() && text == key) { b->click(); return true; } } } } return false; } return QWidget::eventFilter(obj, event);}void frmInputNew::initProperty(){ ui->btnDot->setProperty("btnOther", true); ui->btnSpace->setProperty("btnOther", true); ui->btnEnter->setPro

用户评论 (0)

发表评论

captcha