数字键盘
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

239 lines
5.8 KiB

10 months ago
#include "numkeydia.h"
#include "ui_numkeydia.h"
#include <QMouseEvent>
#include <QDebug>
#include <QMessageBox>
NumKeyDia::NumKeyDia(QWidget *parent) :
QDialog(parent),
ui(new Ui::NumKeyDia)
{
ui->setupUi(this);
this->setWindowFlag(Qt::FramelessWindowHint);
ui->lineEdit_input->setCursorPosition(Qt::StrongFocus);
auto _btnInputList = ui->widget_input->findChildren<QPushButton *>();
foreach (auto &i, _btnInputList)
{
connect(i, &QPushButton::clicked, this, &NumKeyDia::btn_input_clicked);
i->setFocusPolicy(Qt::NoFocus);
}
ui->toolButton_ico->installEventFilter(this);
ui->label_appInfo->installEventFilter(this);
}
NumKeyDia::~NumKeyDia()
{
delete ui;
}
bool NumKeyDia::eventFilter(QObject *, QEvent *event)
{
if(event->type() == QEvent::MouseButtonDblClick)
{
if(!m_bMaxFlag)
{
this->showFullScreen();
m_bMaxFlag = true;
}
else
{
this->showNormal();
m_bMaxFlag = false;
}
return true;
}
else if(event->type() == QEvent::MouseButtonPress)
{
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
m_point = mouseEvent->globalPos() - frameGeometry().topLeft();
//鼠标位置减去左上角的左边
}
else if(event->type() == QEvent::MouseMove)
{
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
move(mouseEvent->globalPos() - m_point);
}
return false;
}
QLineEdit *NumKeyDia::pLineEdit() const
{
return m_pLineEdit;
}
void NumKeyDia::setPLineEdit(QLineEdit *newPLineEdit)
{
m_pLineEdit = newPLineEdit;
QString _text = m_pLineEdit->text();
// int _cnt = _text.count();
// for(int i = 0; i < _cnt; ++i)
// {
// if(_text.at(0) != "1" && _text.at(0) != "2" && _text.at(0) != "3" && _text.at(0) != "4" &&
// _text.at(0) != "5" && _text.at(0) != "6" && _text.at(0) != "7" && _text.at(0) != "8" && _text.at(0) != "9")
// {
// _text.remove(0, 1);
// }
// }
ui->lineEdit_input->setFocus();
ui->lineEdit_input->setText(_text);
newPLineEdit->setEnabled(false);
m_firstInputFlag = true;
ui->label_3->setText(m_pLineEdit->property("Name").toString() + ": ");
//最大值和最小值显示
m_isNum = m_pLineEdit->property("IsNum").toBool();
if(!m_isNum)
{
ui->label_min->setText(tr("no limit"));
ui->label_max->setText(tr("no limit"));
return;
}
m_minValue = m_pLineEdit->property("Min").toDouble();
m_maxValue = m_pLineEdit->property("Max").toDouble();
m_isDouble = m_pLineEdit->property("IsDouble").toBool();
if(m_minValue == m_maxValue)
{
ui->label_min->setText(tr("no limit"));
ui->label_max->setText(tr("no limit"));
}
else
{
if(m_isDouble)
{
ui->label_max->setText(QString::number(m_maxValue, 10, 3));
ui->label_min->setText(QString::number(m_minValue, 10, 3));
}
else
{
ui->label_max->setText(QString::number(m_maxValue, 10, 0));
ui->label_min->setText(QString::number(m_minValue, 10, 0));
}
}
}
void NumKeyDia::on_btn_ok_clicked()
{
if(!m_pLineEdit)
return;
//如果输入为空,那么设为0
QString _res = ui->lineEdit_input->text();
if(_res == "")
_res = "0";
//不是数字,直接设置后返回
if(!m_isNum)
{
m_pLineEdit->setText(_res);
}
else
{
bool ok;
double _d = ui->lineEdit_input->text().toDouble(&ok);
if(!ok)
{
QMessageBox::critical(this, "error", "Input is not a number!\nPlease reInput");
return;
}
bool _isNotValid = false;
if(m_minValue < m_maxValue)
{
// _d = (_d < m_minValue) ? m_minValue : _d;
// _d = (_d > m_maxValue) ? m_maxValue : _d;
if(_d < m_minValue || _d > m_maxValue)
_isNotValid = true;
}
if(_isNotValid)
{
QMessageBox::critical(this, "error", "Input is not valid!\nPlease reInput");
return;
}
if(m_isDouble)
m_pLineEdit->setText(QString::number(_d, 10, 3));
else
m_pLineEdit->setText(QString::number(_d, 10, 0));
}
closeKeyBoard();
}
void NumKeyDia::on_btn_cancel_clicked()
{
//取消,关闭数字键盘
closeKeyBoard();
}
void NumKeyDia::on_btn_clear_clicked()
{
//清空
ui->lineEdit_input->clear();
ui->lineEdit_input->setFocus();
}
void NumKeyDia::on_btn_back_clicked()
{
m_firstInputFlag = false;
int _index = ui->lineEdit_input->cursorPosition();
QString _currentText = ui->lineEdit_input->text();
if(_currentText == "")
ui->lineEdit_input->setFocus();
//当前光标在最前面,不做任何处理
if(_index != 0)
{
//删除前一个字符
_currentText.remove(_index - 1, 1);
ui->lineEdit_input->setText(_currentText);
}
ui->lineEdit_input->setFocus();
ui->lineEdit_input->setCursorPosition(_index - 1);
}
void NumKeyDia::btn_input_clicked()
{
if(m_firstInputFlag)
{
ui->lineEdit_input->clear();
m_firstInputFlag = false;
}
auto _btnClicked = qobject_cast<QPushButton *>(sender());
QString _inputValue = _btnClicked->text();
int _index = ui->lineEdit_input->cursorPosition();
QString _currentText = ui->lineEdit_input->text();
_currentText.insert(_index, _inputValue);
ui->lineEdit_input->setText(_currentText);
}
void NumKeyDia::closeKeyBoard()
{
this->close();
m_pLineEdit->setEnabled(true);
}
void NumKeyDia::setMaxValue(double newMaxValue)
{
m_maxValue = newMaxValue;
}
void NumKeyDia::setMinValue(double newMinValue)
{
m_minValue = newMinValue;
}