#include "DigitalInput.h" #include "ui_digitalinput.h" #include "MyInputMethod.h" #include #include #include #include DigitalInput::DigitalInput(MyInputMethod *myInputMethod,QWidget *parent) : QWidget(parent,(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::Tool|Qt::WindowDoesNotAcceptFocus|Qt::BypassWindowManagerHint)), ui(new Ui::DigitalInput) { ui->setupUi(this); this->myInputMethod = myInputMethod; connect(ui->Key_0,SIGNAL(pressed()),this,SLOT(onCharPressed())); connect(ui->Key_1,SIGNAL(pressed()),this,SLOT(onCharPressed())); connect(ui->Key_2,SIGNAL(pressed()),this,SLOT(onCharPressed())); connect(ui->Key_3,SIGNAL(pressed()),this,SLOT(onCharPressed())); connect(ui->Key_4,SIGNAL(pressed()),this,SLOT(onCharPressed())); connect(ui->Key_5,SIGNAL(pressed()),this,SLOT(onCharPressed())); connect(ui->Key_6,SIGNAL(pressed()),this,SLOT(onCharPressed())); connect(ui->Key_7,SIGNAL(pressed()),this,SLOT(onCharPressed())); connect(ui->Key_8,SIGNAL(pressed()),this,SLOT(onCharPressed())); connect(ui->Key_9,SIGNAL(pressed()),this,SLOT(onCharPressed())); connect(ui->Key_pluse,SIGNAL(pressed()),this,SLOT(onCharPressed())); connect(ui->Key_backspace,SIGNAL(pressed()),this,SLOT(onKeyBackspacePressed())); // connect(ui->Key_selectAll,SIGNAL(pressed()),this,SLOT(onKeySelectAllPressed())); // connect(ui->Key_up,SIGNAL(pressed()),this,SLOT(onKeyUpPressed())); // connect(ui->Key_down,SIGNAL(pressed()),this,SLOT(onKeyDownPressed())); connect(ui->enterBtn, &QPushButton::clicked, this, &DigitalInput::onEnterPressed); connect(ui->clrBtn, &QPushButton::clicked, this, &DigitalInput::onClrPressed); } DigitalInput::~DigitalInput() { delete ui; } void DigitalInput::onCharPressed(){ QPushButton * button = qobject_cast(sender()); QString text = button->text(); myInputMethod->sendString (text); } void DigitalInput::onKeyBackspacePressed(){ if(m_currSpinBox && QString::number(m_currSpinBox->value()).size() == 1) { ui->traceEdit->clear(); } #ifndef Q_OS_WIN32 //QWSServer::sendKeyEvent(0,Qt::Key_Backspace,Qt::NoModifier,true,false); //锟斤拷系统锟斤拷锟酵硷拷锟斤拷锟铰硷拷 MyInputMethod::sendEvent(Qt::Key_Backspace,Qt::NoModifier); #endif } void DigitalInput::onKeySelectAllPressed(){ #ifndef Q_OS_WIN32 //QWSServer::sendKeyEvent(0,Qt::Key_A,Qt::ControlModifier,true,false); //锟斤拷系统锟斤拷锟酵硷拷锟斤拷锟铰硷拷 //if(!init) // QWSServer::sendKeyEvent(0,Qt::Key_A,Qt::ControlModifier,true,false); //锟斤拷系统锟斤拷锟酵硷拷锟斤拷锟铰硷拷 //init = 1; MyInputMethod::sendEvent(Qt::Key_A, Qt::ControlModifier); #endif } void DigitalInput::onKeyUpPressed(){ #ifndef Q_OS_WIN32 //QWSServer::sendKeyEvent(0,Qt::Key_Up,Qt::NoModifier,true,false); //锟斤拷系统锟斤拷锟酵硷拷锟斤拷锟铰硷拷 MyInputMethod::sendEvent(Qt::Key_Up,Qt::NoModifier); #endif } void DigitalInput::onKeyDownPressed(){ #ifndef Q_OS_WIN32 //QWSServer::sendKeyEvent(0,Qt::Key_Down,Qt::NoModifier,true,false); //锟斤拷系统锟斤拷锟酵硷拷锟斤拷锟铰硷拷 MyInputMethod::sendEvent(Qt::Key_Down,Qt::NoModifier); #endif } void DigitalInput::onEnterPressed() { if(m_currSpinBox) { m_currSpinBox->clearFocus(); } } void DigitalInput::onClrPressed() { if(m_currSpinBox) { m_currSpinBox->setValue(std::min(m_currSpinBox->maximum(), std::max(m_currSpinBox->minimum(), 0))); } } void DigitalInput::showEvent(QShowEvent *event) { QWidget::showEvent(event); auto focusWidget = qApp->focusWidget(); QSpinBox* box = dynamic_cast(focusWidget); if(!box) { qWarning() << "focusWidget is not QSpinBox"; return; } if(m_currSpinBox) { disconnect(m_currSpinBox, QOverload::of(&QSpinBox::valueChanged), ui->traceEdit, &QLineEdit::setText); } m_currSpinBox = box; ui->traceEdit->setText(box->text()); connect(box, QOverload::of(&QSpinBox::valueChanged), ui->traceEdit, &QLineEdit::setText); qDebug() << "The traceEdit has connected to the QSpinBox: " << box->objectName(); }