QT实现注册: 1.系统必须先通过注册用户后才能登录系统。 2.注册包含必要的用户名,密码外可以使用电话,邮件等一些其他信息。 3.注册的密码满足8-20的字符,有大小写和数字。 4.注册时可以选择头像图片。 5.用户图像支持自定义图片。(高级需求) 登录: 1.用户注册完成后,可以支持多种登录方式。 2.登录一次以后支持记住用户名和密码。代码
时间: 2024-03-05 21:53:28 浏览: 20
以下是一个简单的实现代码,实现了用户注册和登录的功能:
MainWindow.h
```c++
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QFileDialog>
#include <QMessageBox>
#include <QSettings>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_registerBtn_clicked();
void on_loginBtn_clicked();
void on_selectImageBtn_clicked();
private:
Ui::MainWindow *ui;
QString m_imagePath;
bool validateUsername(QString username);
bool validatePassword(QString password);
bool validatePhone(QString phone);
bool validateEmail(QString email);
bool saveUserInfo(QString username, QString password, QString phone, QString email, QString imagePath);
bool loadUserInfo(QString& username, QString& password, QString& phone, QString& email, QString& imagePath);
};
#endif // MAINWINDOW_H
```
MainWindow.cpp
```c++
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 读取上次登录的用户名和密码
QSettings settings("MyApp", "MyApp");
QString username = settings.value("username").toString();
QString password = settings.value("password").toString();
bool rememberPassword = settings.value("rememberPassword", false).toBool();
ui->usernameLineEdit->setText(username);
if (rememberPassword) {
ui->passwordLineEdit->setText(password);
ui->rememberPasswordCheckBox->setChecked(true);
}
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_registerBtn_clicked()
{
QString username = ui->usernameLineEdit->text().trimmed();
QString password = ui->passwordLineEdit->text().trimmed();
QString phone = ui->phoneLineEdit->text().trimmed();
QString email = ui->emailLineEdit->text().trimmed();
// 验证用户名、密码、电话和邮箱
if (!validateUsername(username)) {
QMessageBox::warning(this, "Error", "Invalid username.");
return;
}
if (!validatePassword(password)) {
QMessageBox::warning(this, "Error", "Invalid password.");
return;
}
if (!validatePhone(phone)) {
QMessageBox::warning(this, "Error", "Invalid phone number.");
return;
}
if (!validateEmail(email)) {
QMessageBox::warning(this, "Error", "Invalid email address.");
return;
}
// 保存用户信息
if (!saveUserInfo(username, password, phone, email, m_imagePath)) {
QMessageBox::warning(this, "Error", "Failed to save user info.");
return;
}
QMessageBox::information(this, "Success", "User registration successful.");
}
void MainWindow::on_loginBtn_clicked()
{
QString username = ui->usernameLineEdit->text().trimmed();
QString password = ui->passwordLineEdit->text().trimmed();
// 读取保存的用户信息
QString savedUsername, savedPassword, savedPhone, savedEmail, savedImagePath;
if (!loadUserInfo(savedUsername, savedPassword, savedPhone, savedEmail, savedImagePath)) {
QMessageBox::warning(this, "Error", "Failed to load user info.");
return;
}
// 验证用户名和密码
if (username != savedUsername || password != savedPassword) {
QMessageBox::warning(this, "Error", "Invalid username or password.");
return;
}
// 保存登录信息
QSettings settings("MyApp", "MyApp");
settings.setValue("username", username);
if (ui->rememberPasswordCheckBox->isChecked()) {
settings.setValue("password", password);
settings.setValue("rememberPassword", true);
} else {
settings.remove("password");
settings.remove("rememberPassword");
}
QMessageBox::information(this, "Success", "User login successful.");
}
void MainWindow::on_selectImageBtn_clicked()
{
// 选择图片
QString imagePath = QFileDialog::getOpenFileName(this, "Select Image", ".", "Images (*.png *.jpg *.bmp)");
if (imagePath.isEmpty()) {
return;
}
// 显示图片
QPixmap pixmap(imagePath);
ui->imageLabel->setPixmap(pixmap.scaled(ui->imageLabel->size(), Qt::KeepAspectRatio));
m_imagePath = imagePath;
}
bool MainWindow::validateUsername(QString username)
{
// 用户名不为空且长度不超过20
return !username.isEmpty() && username.length() <= 20;
}
bool MainWindow::validatePassword(QString password)
{
// 密码长度在8到20之间,含大小写字母和数字
QRegExp regExp("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[a-zA-Z\\d]{8,20}$");
return regExp.exactMatch(password);
}
bool MainWindow::validatePhone(QString phone)
{
// 暂时只判断长度
return phone.length() <= 20;
}
bool MainWindow::validateEmail(QString email)
{
// 邮箱格式验证
QRegExp regExp("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$");
return regExp.exactMatch(email);
}
bool MainWindow::saveUserInfo(QString username, QString password, QString phone, QString email, QString imagePath)
{
// 保存用户信息到本地文件
QSettings settings("MyApp", "MyApp");
settings.setValue("username", username);
settings.setValue("password", password);
settings.setValue("phone", phone);
settings.setValue("email", email);
settings.setValue("imagePath", imagePath);
return true;
}
bool MainWindow::loadUserInfo(QString& username, QString& password, QString& phone, QString& email, QString& imagePath)
{
// 从本地文件读取用户信息
QSettings settings("MyApp", "MyApp");
username = settings.value("username").toString();
password = settings.value("password").toString();
phone = settings.value("phone").toString();
email = settings.value("email").toString();
imagePath = settings.value("imagePath").toString();
return !username.isEmpty() && !password.isEmpty();
}
```
注意,这段代码只是一个简单的实现,仅供参考。实际应用中需要更加完善的验证和安全措施。