#include "numkeydia.h" #include "ui_numkeydia.h" #include #include #include 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(); 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(event); m_point = mouseEvent->globalPos() - frameGeometry().topLeft(); //鼠标位置减去左上角的左边 } else if(event->type() == QEvent::MouseMove) { QMouseEvent *mouseEvent = static_cast(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_isDouble) { m_format = m_pLineEdit->property("Format").toInt(); m_prec = m_pLineEdit->property("Prec").toInt(); } 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, m_format, m_prec)); ui->label_min->setText(QString::number(m_minValue, m_format, m_prec)); } 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, m_format, m_prec)); 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(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; }