2026年7月16日 缓存
This commit is contained in:
+79
-22
@@ -5,9 +5,10 @@
|
||||
#include <QSpinBox>
|
||||
#include <QSpinBox>
|
||||
#include <QDebug>
|
||||
#include <QKeyEvent>
|
||||
|
||||
DigitalInput::DigitalInput(MyInputMethod *myInputMethod,QWidget *parent) :
|
||||
QWidget(parent,(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::Tool|Qt::WindowDoesNotAcceptFocus|Qt::BypassWindowManagerHint)),
|
||||
QWidget(parent,(Qt::FramelessWindowHint )),
|
||||
ui(new Ui::DigitalInput)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
@@ -31,6 +32,14 @@ DigitalInput::DigitalInput(MyInputMethod *myInputMethod,QWidget *parent) :
|
||||
|
||||
connect(ui->enterBtn, &QPushButton::clicked, this, &DigitalInput::onEnterPressed);
|
||||
connect(ui->clrBtn, &QPushButton::clicked, this, &DigitalInput::onClrPressed);
|
||||
|
||||
// 所有键盘按钮不接收焦点,避免点击按钮时 traceEdit 丢失焦点
|
||||
QList<QPushButton*> btns = findChildren<QPushButton*>();
|
||||
for (QPushButton* btn : btns) {
|
||||
btn->setFocusPolicy(Qt::NoFocus);
|
||||
}
|
||||
|
||||
ui->traceEdit->setFocusPolicy(Qt::StrongFocus);
|
||||
}
|
||||
|
||||
DigitalInput::~DigitalInput()
|
||||
@@ -41,21 +50,52 @@ DigitalInput::~DigitalInput()
|
||||
|
||||
void DigitalInput::onCharPressed(){
|
||||
QPushButton * button = qobject_cast<QPushButton *>(sender());
|
||||
QString text = button->text();
|
||||
myInputMethod->sendString (text);
|
||||
QString ch = button->text();
|
||||
|
||||
if (!m_currSpinBox) {
|
||||
ui->traceEdit->insert(ch);
|
||||
return;
|
||||
}
|
||||
|
||||
int cursorPos = ui->traceEdit->cursorPosition();
|
||||
QString currentText = ui->traceEdit->text();
|
||||
QString newText = currentText.left(cursorPos) + ch + currentText.mid(cursorPos);
|
||||
|
||||
if (newText.isEmpty()) {
|
||||
ui->traceEdit->insert(ch);
|
||||
return;
|
||||
}
|
||||
|
||||
bool ok = false;
|
||||
int value = newText.toInt(&ok);
|
||||
if (!ok) {
|
||||
ui->traceEdit->insert(ch);
|
||||
return;
|
||||
}
|
||||
|
||||
int max = m_currSpinBox->maximum();
|
||||
if (value <= max) {
|
||||
ui->traceEdit->insert(ch);
|
||||
}
|
||||
}
|
||||
|
||||
void DigitalInput::onKeyBackspacePressed(){
|
||||
|
||||
if(m_currSpinBox && QString::number(m_currSpinBox->value()).size() == 1) {
|
||||
ui->traceEdit->clear();
|
||||
// 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
|
||||
int cursorPos = ui->traceEdit->cursorPosition();
|
||||
if (cursorPos > 0) {
|
||||
QString text = ui->traceEdit->text();
|
||||
text.remove(cursorPos - 1, 1);
|
||||
ui->traceEdit->setText(text);
|
||||
ui->traceEdit->setCursorPosition(cursorPos - 1);
|
||||
}
|
||||
|
||||
#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(){
|
||||
@@ -85,16 +125,19 @@ void DigitalInput::onKeyDownPressed(){
|
||||
|
||||
void DigitalInput::onEnterPressed()
|
||||
{
|
||||
if(m_currSpinBox) {
|
||||
m_currSpinBox->clearFocus();
|
||||
}
|
||||
hide();
|
||||
}
|
||||
|
||||
void DigitalInput::onClrPressed()
|
||||
{
|
||||
if(m_currSpinBox) {
|
||||
m_currSpinBox->setValue(std::min(m_currSpinBox->maximum(), std::max(m_currSpinBox->minimum(), 0)));
|
||||
}
|
||||
// if(m_currSpinBox) {
|
||||
// m_currSpinBox->setValue(std::min(m_currSpinBox->maximum(), std::max(m_currSpinBox->minimum(), 0)));
|
||||
// ui->traceEdit->setText(m_currSpinBox->value());
|
||||
// // ui->traceEdit->setFocus();
|
||||
// }
|
||||
|
||||
ui->traceEdit->clear();
|
||||
ui->traceEdit->setFocus();
|
||||
}
|
||||
|
||||
void DigitalInput::showEvent(QShowEvent *event)
|
||||
@@ -104,15 +147,29 @@ void DigitalInput::showEvent(QShowEvent *event)
|
||||
QSpinBox* box = dynamic_cast<QSpinBox*>(focusWidget);
|
||||
if(!box) {
|
||||
qWarning() << "focusWidget is not QSpinBox";
|
||||
m_currSpinBox = nullptr;
|
||||
return;
|
||||
}
|
||||
|
||||
if(m_currSpinBox) {
|
||||
disconnect(m_currSpinBox, QOverload<const QString&>::of(&QSpinBox::valueChanged), ui->traceEdit, &QLineEdit::setText);
|
||||
}
|
||||
|
||||
m_currSpinBox = box;
|
||||
ui->traceEdit->setText(box->text());
|
||||
connect(box, QOverload<const QString&>::of(&QSpinBox::valueChanged), ui->traceEdit, &QLineEdit::setText);
|
||||
// focusWidget->clearFocus();
|
||||
ui->traceEdit->setFocus();
|
||||
|
||||
// connect(box, QOverload<const QString&>::of(&QSpinBox::valueChanged), ui->traceEdit, &QLineEdit::setText);
|
||||
qDebug() << "The traceEdit has connected to the QSpinBox: " << box->objectName();
|
||||
}
|
||||
|
||||
void DigitalInput::hideEvent(QHideEvent * event)
|
||||
{
|
||||
QWidget::hideEvent(event);
|
||||
|
||||
if(m_currSpinBox) {
|
||||
int value = ui->traceEdit->text().toInt();
|
||||
int min = m_currSpinBox->minimum();
|
||||
int max = m_currSpinBox->maximum();
|
||||
value = qBound(min, value, max);
|
||||
m_currSpinBox->setValue(value);
|
||||
m_currSpinBox->clearFocus();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user