Qt实现登录验证码

这篇博客介绍了一种使用QFrame和Qt库在C++中创建自定义验证码的方法。作者通过创建一个名为Ver的类,实现了生成随机数字和字母的验证码,并在鼠标点击或输入错误时自动刷新验证码的功能。文章详细讲解了Ver类的定义,包括generateRandomNumber()、paintEvent()和mousePressEvent()等关键方法,展示了如何在Qt中绘制噪点、线条和验证码文字。
摘要由CSDN通过智能技术生成

示例

先放一下效果图
在这里插入图片描述
每次验证码输入错误或者点击验证码图片都可以进行验证码的刷新
在这里插入图片描述

正文

  • 用到的是QFrame
    需要用到UI里的类提升,自建一个新的设计师类,系统会自动生成.h和.cpp
    我这里的类名用的是Ver,有需要的自行替换即可

Ver.h

#ifndef VER_H
#define VER_H

#include <QFrame>
#include <QLabel>
#include <QString>

namespace Ui {
class Ver;
}

class Ver : public QFrame
{
    Q_OBJECT

public:
    explicit Ver(QWidget *parent = nullptr);
    ~Ver();

    void generateRandomNumber(); //生成随机的数字和字母
    void paintEvent(QPaintEvent *); //画噪点和线
    void mousePressEvent(QMouseEvent *event); //鼠标点击事件


    QString code;



private:

};

#endif // VER_H

Ver.cpp

#include "ver.h"

#include <QPainter>
#include <QStyleOption>
#include <QLineEdit>
#include <QTime>
#include <QChar>
#include <QDebug>

Ver::Ver(QWidget *parent) :
    QFrame(parent)
{
     //paintEvent();

     generateRandomNumber();
     update();
}

Ver::~Ver()
{

}

void Ver::generateRandomNumber()
{
    code.clear();

    for(int i = 0;i < 4;++i)
        {
            int num = qrand()%3;
            if(num == 0)
            {
                //数字
                code += QString::number(qrand()%10);
             }
             else if(num == 1)
             {
                //大写字母
                int temp = 'A';
                code += static_cast<QChar>(temp + qrand()%26);
              }else if(num == 2)
              {
                 //小写字母
                 int temp = 'a';
                code += static_cast<QChar>(temp + qrand()%26);
               }
       }
}



void Ver::paintEvent(QPaintEvent *)            //绘画
{


    QPainter painter(this);
    QPen pen;

    //画点
    for(int i = 0;i < 100;++i) {
       pen = QPen(QColor(qrand()%256,qrand()%256,qrand()%256));
       painter.setPen(pen);
       painter.drawPoint(qrand()%150,qrand()%50);
     }

     //画线
     for(int i = 0;i < 10;++i) {
         painter.drawLine(qrand()%150,qrand()%50,qrand()%150,qrand()%50);
     }

     pen = QPen(QColor(255,0,0,100));
     QFont font("楷体",25,QFont::Bold,true);
     painter.setFont(font);
     painter.setPen(pen);
     //绘画字
     for(int i = 0;i < 4;++i) {
        painter.drawText(10+30*i,5,30,40,Qt::AlignCenter, QString(code[i]));
     }

     //ui->ver->setText(code);
}

void Ver::mousePressEvent(QMouseEvent *event)
{
    generateRandomNumber();
    update();

   // qDebug() << code << endl;
}
  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
下面是一个简单的 Qt 实现登录界面的项目,供参考: 1. 创建一个新的 Qt 项目,选择“Qt Widgets Application”。 2. 在“MainWindow.ui”中设计登录界面。可以添加以下组件: - QLabel:用于显示标题和图标。 - QLineEdit:用于输入用户名和密码。 - QPushButton:用于提交登录信息。 - QCheckBox:用于记住密码。 - QComboBox:用于选择登录方式(如“普通用户”和“管理员”)。 3. 在“MainWindow.cpp”中编写代码,实现登录逻辑。可以使用以下步骤: - 在构造函数中初始化界面组件,并连接提交按钮的 clicked() 信号到槽函数。 - 在槽函数中获取用户名、密码和登录方式,并进行验证。 - 如果验证通过,可以保存登录状态并关闭登录窗口,打开主窗口;否则弹出错误提示框。 下面是示例代码: ```cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include <QMessageBox> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); // 初始化界面组件 ui->usernameEdit->setText("admin"); ui->passwordEdit->setEchoMode(QLineEdit::Password); ui->rememberCheck->setChecked(true); ui->roleCombo->addItem("普通用户"); ui->roleCombo->addItem("管理员"); // 连接提交按钮的 clicked() 信号到槽函数 connect(ui->submitButton, &QPushButton::clicked, this, &MainWindow::onSubmit); } MainWindow::~MainWindow() { delete ui; } void MainWindow::onSubmit() { // 获取用户名、密码和登录方式 QString username = ui->usernameEdit->text(); QString password = ui->passwordEdit->text(); QString role = ui->roleCombo->currentText(); // 进行验证 if (username == "admin" && password == "123456" && role == "管理员") { QMessageBox::information(this, "登录成功", "欢迎您,管理员!"); // TODO: 保存登录状态,打开主窗口 this->close(); } else if (username == "user" && password == "123456" && role == "普通用户") { QMessageBox::information(this, "登录成功", "欢迎您,普通用户!"); // TODO: 保存登录状态,打开主窗口 this->close(); } else { QMessageBox::warning(this, "登录失败", "用户名或密码错误!"); } } ``` 4. 运行程序,测试登录界面的功能。可以输入不同的用户名、密码和登录方式,测试验证逻辑是否正确。 注意:上述代码只是一个示例,实际应用中需要根据具体需求进行完善和优化。例如,可以使用数据库存储用户信息,增加验证码等安全机制等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值