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中常用的3种提示框设计方法相关推荐
- android 弹窗有边框_android中常用的弹出提示框
我们在平时做开发的时候,免不了会用到各种各样的对话框,相信有过其他平台开发经验的朋友都会知道,大部分的平台都只提供了几个最简单的实现,如果我们想实现自己特定需求的对话框,大家可能首先会想到,通过继承等 ...
- iOS中常用的几种延时加载/执行的处理办法
在开发过程中 我们会常常需要用到这样的延迟处理这种技术 那么, 一般你们会怎么去做这样的一个延时操作呢? 比如, 用户登录成功以后,提示登录成功,然后再将控制器从登录页切到主页 又或是,等待一个动画完 ...
- 【温故知新】——原生js中常用的四种循环方式
一.引言 本文主要是利用一个例子,讲一下原生js中常用的四种循环方式的使用与区别: 实现效果: 在网页中弹出框输入0 网页输出"欢迎下次光临" 在网页中弹出框输入1 网页输 ...
- javascript弹出浏览器的三种提示框:提示信息框、确认框、输入文本框
浏览器的三种提示框: alert()提示信息框 confirm()提示确认框 prompt()提示输入文本框 1.alert()提示信息框 效果: 实现代码: <script>alert( ...
- python编程中常用的12种基础知识总结
python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...
- php三个数字比较大小排序,php中常用的4种实现数字大小排序的冒泡选择等算法函数代码...
分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中按照从小到大的顺序进行排序. 本站收录这篇文章php中常用的4种实现数字大小排序的冒泡选择等算法函数代码,详细解说文章中相关排序 冒泡 ...
- java中常用的几种排序算法--常见笔试面试
转载:http://blog.csdn.net/ygc87/article/details/7208082 以下列出Java中常用的几种排序算法,只是简单实现了排序的功能,还有待改进,望指教(以下均假 ...
- pytorch梯度下降函数_Pytorch中常用的四种优化器SGD、Momentum、RMSProp、Adam
来源:AINLPer微信公众号 编辑: ShuYini 校稿: ShuYini 时间: 2019-8-16 引言 很多人在使用pytorch的时候都会遇到优化器选择的问题,今天就给大家介绍对比 ...
- python中常用的九种预处理方法
本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(Standardization or Mean Removal ...
最新文章
- SharePoint 2007图文开发教程(6)---实现Search Services
- 配置 Keepalived + LVS-DR模式, 实现高可用和负载均衡
- Console.js:彩蛋和作弊码
- mongodb--GridFS
- Jmeter_简单的关联设置
- 美国总统就职演说词汇分布图
- springcloud hystrix入门简介(一)
- 基于块的linux驱动程序,基于块的Linux驱动程序 块设备驱动 centos内核编译过程 操作系统课程设计...
- UIButton的resizableImageWithCapInsets使用解析
- oracle的concat的用法
- python机器学习应用mooc_(3)决策树
- 微信小游戏代码包侵权的避开技巧(含处理脚本代码)
- Visual C++网络编程经典案例详解 第5章 网页浏览器 CHtmlView类 实现查看源文件功能步骤
- 系统封装失败遇到windows 无法分析或处理
- php批量下载图片并打包
- 【iOS】遍历相册照片
- 2022年全球与中国超快激光器市场现状及未来发展趋势
- java中的NIO,BIO,AIO
- 跟小丸子学基础口语21-25
- 如何动态改变日志级别