#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMouseEvent>
#include <QRandomGenerator>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 设置UI界面
m_captcha = getCaptcha();
// 获取验证码
m_color = generateRandomColor();
// 生成随机颜色
//update();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()//验证按钮的槽函数
{
QString captcha = ui->lineEdit->text().replace(" ", "");
// 获取用户输入的验证码并去除空格
if(captcha.toLower() == m_captcha.toLower())
// 将用户输入的验证码和生成的验证码进行比较(忽略大小写)
{
QMessageBox::warning(this, "Warning", "Captcha is macthed");
// 如果验证码匹配,显示匹配提示框
}
else
{
QMessageBox::warning(this, "Warning", "Captcha is not macthed");
// 如果验证码不匹配,显示不匹配提示框
m_captcha = getCaptcha();
// 获取新的验证码
}
}
void MainWindow::on_pushButton_2_clicked()//刷新按钮的槽函数
{
m_captcha = getCaptcha(); // 获取新的验证码
m_color = generateRandomColor(); // 生成随机颜色
repaint(); // 重新绘制窗口
update(); // 更新窗口显示
}
void MainWindow::paintEvent(QPaintEvent *evt)
{
QPainter painter(this);
// 填充背景为白色
painter.fillRect(ui->label->x()+ui->widget->x(), ui->label->y()+ui->widget->y(), ui->label->width(), ui->label->height(), Qt::white);
// 设置字体样式
painter.setFont(QFont("Lucida Console", 18,QFont::Bold));
// 绘制验证码字符
for(int i = 0; i < 4; i++)
{
QColor color = generateRandomColor();
// 生成随机颜色
QPen pen(color);
pen.setWidth(1);
painter.setPen(pen);
painter.drawText(ui->label->x() +ui->widget->x()+ 30*i, ui->label->y()+ui->widget->y(), 30, ui->label->height(), Qt::AlignCenter,
QString(m_captcha[i]));
// 绘制验证码字符
}
// 绘制噪点
for(int i=0; i<1500; i++)
{
QColor color = generateRandomColor();
// 生成随机颜色
QPen pen(color);
pen.setWidth(1);
painter.setPen(pen);
painter.drawPoint(ui->label->x()+ui->widget->x()+ (qrand() % ui->label->width()), ui->label->y()+ui->widget->y() + (qrand() % ui->label->height()));
}
// 绘制干扰线
for(int i = 0;i < 10;++i)
{
painter.drawLine(ui->label->x()+ui->widget->x()+qrand()%ui->label->width(),ui->label->y()+ui->widget->y()+qrand()%ui->label->height(),
ui->label->x()+ui->widget->x()+qrand()%ui->label->width(),ui->label->y()+ui->widget->y()+qrand()%ui->label->height());
}
}
QString MainWindow::getCaptcha()
{
const QString possibleCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
const int captchaLength = 4;
QString result = "";
// 生成验证码字符串
for (int i = 0; i < captchaLength; ++i) {
int index = QRandomGenerator::global()->bounded(possibleCharacters.length());
// 生成一个0到possibleCharacters长度之间的随机整数
result.append(possibleCharacters.at(index));
// 将随机位置的字符添加到结果字符串中
}
return result; // 返回生成的验证码字符串
}
QColor MainWindow::generateRandomColor() {
int red = QRandomGenerator::global()->bounded(256);
// 生成0到255之间的随机整数作为红色通道的值
int green = QRandomGenerator::global()->bounded(256);
// 生成0到255之间的随机整数作为绿色通道的值
int blue = QRandomGenerator::global()->bounded(256);
// 生成0到255之间的随机整数作为蓝色通道的值
return QColor(red, green, blue);
// 使用生成的RGB值创建并返回一个QColor对象
}
没有合适的资源?快使用搜索试试~ 我知道了~
Qt实现验证码相关功能
共7个文件
cpp:2个
pro:2个
h:1个
需积分: 5 1 下载量 132 浏览量
2024-01-26
14:32:36
上传
评论
收藏 6KB ZIP 举报
温馨提示
Qt实现验证码相关功能: 1.在QT Designer中创建一个UI界面,添加一个Label标签,两个Button按钮以及一个lineEdit输入框 2.设置Label标签:将Label标签设置为显示验证码。你可以使用QLabel类来创建标签,并设置其文本属性。 3.实现验证码逻辑:编写代码以生成验证码。这通常涉及到一个随机数生成器,用于生成一个唯一的验证码字符串。 4.刷新验证码:当用户点击按钮时,重新生成一个新的验证码,并更新Label标签的文本属性。 5.验证验证码:当用户提交表单时,验证你所输入的验证码是否与Label标签上显示的验证码匹配。
资源推荐
资源详情
资源评论
收起资源包目录
jiaowuchu.zip (7个子文件)
jiaowuchu
mainwindow.h 659B
mainwindow.cpp 4KB
main.cpp 183B
mainwindow.ui 2KB
jiaowuchu.pro 614B
jiaowuchu.pro.user 32KB
jiaowuchu - 副本.pro 614B
共 7 条
- 1
资源评论
做一个AC梦
- 粉丝: 877
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功