其他分享
首页 > 其他分享> > Qt中常用的3种提示框设计方法

Qt中常用的3种提示框设计方法

作者:互联网

Qt中常用的提示信息设计方法

问题背景】通常,在项目项目开发的过程中,某些人机交互界面需要对用户的输入数据进行合法性判断,如果用户输入数据合法,则进入下一步流程,否则,就要给出相应的错误提示,以提示用户按照要求输入正确的数据。

解决思路】首先解决问题一定要严格遵守客户需求(当然,无理需求除外)进行解决,其次就是结合具体情况,在达到客户需求(或软件目的)的情况下采用尽可能美观的效果进行提示,通常有如下三种方法:

  1. 弹出警告对话框,从而提示错误类型;
  2. 用户输入完成之后立即判断,如果错误,就给出文字(声音等)提示,注意提示信息尽可能醒目;
  3. 用户输入完成后,进行下一步动作时进行判断,如果正确,则继续向下执行,否则,返回到输入界面,提示用户按要求输入。

解决方案】针对第一种情况,通常采用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