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
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;
|
||
|
}
|
||
|
|