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中常用的3种提示框设计方法相关推荐

  1. android 弹窗有边框_android中常用的弹出提示框

    我们在平时做开发的时候,免不了会用到各种各样的对话框,相信有过其他平台开发经验的朋友都会知道,大部分的平台都只提供了几个最简单的实现,如果我们想实现自己特定需求的对话框,大家可能首先会想到,通过继承等 ...

  2. iOS中常用的几种延时加载/执行的处理办法

    在开发过程中 我们会常常需要用到这样的延迟处理这种技术 那么, 一般你们会怎么去做这样的一个延时操作呢? 比如, 用户登录成功以后,提示登录成功,然后再将控制器从登录页切到主页 又或是,等待一个动画完 ...

  3. 【温故知新】——原生js中常用的四种循环方式

    一.引言 本文主要是利用一个例子,讲一下原生js中常用的四种循环方式的使用与区别: 实现效果: 在网页中弹出框输入0   网页输出"欢迎下次光临" 在网页中弹出框输入1   网页输 ...

  4. javascript弹出浏览器的三种提示框:提示信息框、确认框、输入文本框

    浏览器的三种提示框: alert()提示信息框 confirm()提示确认框 prompt()提示输入文本框 1.alert()提示信息框 效果: 实现代码: <script>alert( ...

  5. python编程中常用的12种基础知识总结

    python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...

  6. php三个数字比较大小排序,php中常用的4种实现数字大小排序的冒泡选择等算法函数代码...

    分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中按照从小到大的顺序进行排序. 本站收录这篇文章php中常用的4种实现数字大小排序的冒泡选择等算法函数代码,详细解说文章中相关排序 冒泡 ...

  7. java中常用的几种排序算法--常见笔试面试

    转载:http://blog.csdn.net/ygc87/article/details/7208082 以下列出Java中常用的几种排序算法,只是简单实现了排序的功能,还有待改进,望指教(以下均假 ...

  8. pytorch梯度下降函数_Pytorch中常用的四种优化器SGD、Momentum、RMSProp、Adam

    来源:AINLPer微信公众号 编辑: ShuYini 校稿: ShuYini 时间: 2019-8-16 引言     很多人在使用pytorch的时候都会遇到优化器选择的问题,今天就给大家介绍对比 ...

  9. python中常用的九种预处理方法

    本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(Standardization or Mean Removal ...

最新文章

  1. SharePoint 2007图文开发教程(6)---实现Search Services
  2. 配置 Keepalived + LVS-DR模式, 实现高可用和负载均衡
  3. Console.js:彩蛋和作弊码
  4. mongodb--GridFS
  5. Jmeter_简单的关联设置
  6. 美国总统就职演说词汇分布图
  7. springcloud hystrix入门简介(一)
  8. 基于块的linux驱动程序,基于块的Linux驱动程序 块设备驱动 centos内核编译过程 操作系统课程设计...
  9. UIButton的resizableImageWithCapInsets使用解析
  10. oracle的concat的用法
  11. python机器学习应用mooc_(3)决策树
  12. 微信小游戏代码包侵权的避开技巧(含处理脚本代码)
  13. Visual C++网络编程经典案例详解 第5章 网页浏览器 CHtmlView类 实现查看源文件功能步骤
  14. 系统封装失败遇到windows 无法分析或处理
  15. php批量下载图片并打包
  16. 【iOS】遍历相册照片
  17. 2022年全球与中国超快激光器市场现状及未来发展趋势
  18. java中的NIO,BIO,AIO
  19. 跟小丸子学基础口语21-25
  20. 如何动态改变日志级别

热门文章

  1. 文件系统的详解与常见文件系统模式比较
  2. python自动化测试篇一 简单介绍
  3. 利用TCPDF将html页面转换为PDF格式
  4. scp命令 二进制_plc中scl指令和scp指令的作用与应用案例
  5. Selection Sort
  6. ABLIC推出车载用S-19914/5系列低EMI超小型降压开关稳压器,可将传导噪音降至原先水平的1/3
  7. 大三来临!感触良多!
  8. 有没有必要考一个ata计算机职业能力合证书?
  9. 对尼姆达蠕虫的详细分析 (转)
  10. 如何使用“时间机器”备份Mac电脑