Qt中常用的3种提示框设计方法
作者:互联网
Qt中常用的提示信息设计方法
【问题背景】通常,在项目项目开发的过程中,某些人机交互界面需要对用户的输入数据进行合法性判断,如果用户输入数据合法,则进入下一步流程,否则,就要给出相应的错误提示,以提示用户按照要求输入正确的数据。
【解决思路】首先解决问题一定要严格遵守客户需求(当然,无理需求除外)进行解决,其次就是结合具体情况,在达到客户需求(或软件目的)的情况下采用尽可能美观的效果进行提示,通常有如下三种方法:
- 弹出警告对话框,从而提示错误类型;
- 用户输入完成之后立即判断,如果错误,就给出文字(声音等)提示,注意提示信息尽可能醒目;
- 用户输入完成后,进行下一步动作时进行判断,如果正确,则继续向下执行,否则,返回到输入界面,提示用户按要求输入。
【解决方案】针对第一种情况,通常采用QMessageBox来解决,第二种更适合QLineEidt的输入判断,因此采用setToolTip()函数来实现,第三种可采用自定义方法来解决,通常可用于用户点击完某个按钮时进行提示。
构造函数
#include <QRegExp>
#include <QDebug>
#include <QMessageBox>
#include <QString>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
, m_nTime(3000) //定时3000ms
{
ui->setupUi(this);
init();
connect(ui->pushButton_Digit, &QPushButton::clicked, this, &Widget::onMessageBox);
connect(ui->lineEdit_Integer, &QLineEdit::editingFinished, this, &Widget::onLineEdit);
connect(ui->pushButton_Range, &QPushButton::clicked, this, &Widget::onBtn);
connect(m_pTimer, &QTimer::timeout, this, &Widget::onChange);
}
QMessageBox
该方法是用户点击相应按钮后,系统通过判断输入结果,从而给出错误警告,以下以输入数字为例给出实现方法:
connect(ui->pushButton_Digit, &QPushButton::clicked, this, &Widget::onMessageBox);
void Widget::onMessageBox()
{
QRegExp regx("[0-9]+$");
if (regx.exactMatch(ui->lineEdit_Digit->text()))
{
qDebug() << QStringLiteral("Input Right!");
}
else
{
int ret = QMessageBox::warning(this, QStringLiteral("Error!"), QStringLiteral("Please Enter Digit"), QMessageBox::Cancel | QMessageBox::Ok);
if( ret == QMessageBox::Ok)
{
ui->lineEdit_Digit->clear();
}
else
{
this->close();
}
}
}
如果用户输入为数字,则会打印“Input Right!”,否则会弹出QMessageBox对话框提示输入错误,当用户点击OK按钮时,会返回到输入界面,并清除上次输入内容,运行结果如下图:
setToolTip()
该方法是:当用户在QLineEdit里输入完成后,系统判断是否正确,如果错误,则给出问题提示,并将错误的编辑框标红,以下代码以输入整数为例:
connect(ui->lineEdit_Integer, &QLineEdit::editingFinished, this, &Widget::onLineEdit);
void Widget::onLineEdit()
{
QRegExp regx("^-?[0-9]*$");
if(regx.exactMatch(ui->lineEdit_Integer->text()))
{
ui->lineEdit_Integer->setStyleSheet("QLineEdit{border:1px solid rgb(0, 0, 0);}");
qDebug()<<QStringLiteral("Input Right!");
}
else
{
ui->lineEdit_Integer->setStyleSheet("QLineEdit{border:1px solid rgb(255, 0, 0);}");
QString str = QString::fromLocal8Bit("Must Integer(...,-3,-2,-1,0,1,2,3,...)");
ui->lineEdit_Integer->setToolTip(str);
}
}
运行结果如下:
自定义方法
该方法是:用户输入完成后,点击相应按钮,系统会进行判断,如果错误,则会标红错误的编辑框,并在按钮旁边给出错误提示框,这里的提示框以定时器实现,以下代码以输入整数范围为-10到1000为例:
void Widget::init()
{
setBtnTip();
m_pTimer = new QTimer();
}
提示文字设置如下:
void Widget::setBtnTip()
{
m_pLabelShowTip = new QLabel(this);
m_pLabelShowTip->setText(QStringLiteral("Data Range: -10 : 1000"));
m_pLabelShowTip->hide();
m_pLabelShowTip->setGeometry(230, 185, 150, 20);
m_pLabelShowTip->setStyleSheet("QLabel{border:1px solid rgb(0, 0, 0); background-color:rgb(255, 255, 255)}");
m_pLabelShowTip->setAlignment(Qt::AlignCenter);
m_pLabelShowTip1 = new QLabel(this);
m_pLabelShowTip1->setText(QStringLiteral("Format Error!"));
m_pLabelShowTip1->hide();
m_pLabelShowTip1->setGeometry(230, 185, 150, 20);
m_pLabelShowTip1->setStyleSheet("QLabel{border:1px solid rgb(0, 0, 0); background-color:rgb(255, 255, 255)}");
m_pLabelShowTip1->setAlignment(Qt::AlignCenter);
}
实现代码:
void Widget::onBtn()
{
QRegExp regx("^-?[0-9]*$");
if(regx.exactMatch(ui->lineEdit_Range->text()))
{
int value = ui->lineEdit_Range->text().toInt();
if(value <= 1000 && value >= -10)
{
qDebug("Input Right!");
ui->lineEdit_Range->setStyleSheet("QLineEdit{border:1px solid rgb(0, 0, 0);}");
}
else
{
m_pLabelShowTip->show();
ui->lineEdit_Range->setStyleSheet("QLineEdit{border:1px solid rgb(255, 0, 0);}");
m_pTimer->start(m_nTime);
}
}
else
{
qDebug("Format Error!");
m_pLabelShowTip1->show();
ui->lineEdit_Range->setStyleSheet("QLineEdit{border:1px solid rgb(255, 0, 0);}");
m_pTimer->start(m_nTime);
}
}
定时器响应:
void Widget::onChange()
{
m_pTimer->stop();
m_pLabelShowTip->hide();
m_pLabelShowTip1->hide();
}
上述代码中,当用户输入数字不为整数时,提示格式错误,当数字超出范围时,则会给出范围提示,运行结果如下:
正确:
格式错误:
超出范围:
以上代码为部分核心代码,读者可依据需要进行截取。另:提示文本框设计方法多样,各有优缺点,大家如有更好的方法,可以多多交流。
标签:常用,Qt,Widget,rgb,ui,lineEdit,提示框,输入,255 来源: https://blog.csdn.net/weixin_39935783/article/details/113728531