程序优化的几个方面:

  1. 减少不必要的头文件引用:在manage.cpp文件中,只使用了manage.h、users.h、ui_manage.h、sqlite.h和reg.h这几个头文件,可以将其他不必要的头文件引用删除,以减少编译时间和内存占用。

  2. 减少重复的信号槽连接:在manage.cpp文件中,loginon和registe按钮的点击事件都连接了closeButtonClicked信号,可以将这两个按钮的点击事件合并为一个槽函数,只连接一次信号。

  3. 使用预处理器宏定义:在manage.h文件中,可以使用#ifndef、#define和#endif预处理器宏定义来避免重复引用头文件的问题。

  4. 合理使用指针和对象的创建和销毁:在users.cpp文件中,可以将Manage对象的创建和销毁操作放在需要使用的地方,而不是在users构造函数中创建和在closeWidget槽函数中销毁。

  5. 使用const修饰不会修改的参数:在loginUser函数中,username和passwd参数不会被修改,可以使用const修饰,增加代码的可读性。

  6. 使用QSqlQuery::value函数获取查询结果:在loginUser函数中,可以使用QSqlQuery::value函数获取查询结果,而不是使用QSqlQuery::next函数判断查询结果是否存在。

  7. 减少不必要的调试输出:在loginUser函数中,可以删除不必要的调试输出,以减少输出信息。

优化后的代码如下:

manage.h:

#ifndef MANAGE_H
#define MANAGE_H

#include <QWidget>

class QSqlQuery;

namespace Ui {
class Manage;
}

class Manage : public QWidget
{
    Q_OBJECT

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

private slots:
    void loginUser(const QString& username, const QString& password);
    void registerUser();

signals:
    void closeButtonClicked();

private:
    Ui::Manage *ui;
};

#endif // MANAGE_H

manage.cpp:

#include "manage.h"
#include "ui_manage.h"
#include "sqlite.h"
#include "reg.h"
#include <QPushButton>
#include <QMessageBox>
#include <QDebug>

Manage::Manage(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Manage)
{
    ui->setupUi(this);

    connect(ui->loginon, &QPushButton::clicked, this, [=]() {
        loginUser(ui->username->text(), ui->password->text());
    });
    connect(ui->registe, &QPushButton::clicked, this, [=]() {
        emit closeButtonClicked();
        registerUser();
    });
}

Manage::~Manage()
{
    delete ui;
}

void Manage::loginUser(const QString& username, const QString& password)
{
    Sqlite::sqlite_init();
    QSqlQuery query;
    QString sql = QString("SELECT * FROM users WHERE username = '%1' AND passwd = '%2'").arg(username).arg(password);
    if (!query.exec(sql)) {
        qDebug() << "查询失败:" << query.lastError().text();
    }

    if (query.next()) {
        qDebug() << "登录成功!";
        QMessageBox::information(this, "登录认证", "登录成功");
        QWidget *w = new QWidget;
        w->show();
        this->close();
    } else {
        qDebug() << "登录失败!" << query.lastError();
        QMessageBox::information(this, "登录认证", "登录失败,账户或者密码错误");
    }
}

void Manage::registerUser()
{
    this->close();
    Reg *s = new Reg;
    s->show();
}

users.h:

#ifndef USERS_H
#define USERS_H

#include <QWidget>

class Manage;

namespace Ui {
class users;
}

class users : public QWidget
{
    Q_OBJECT

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

    void displayLogin();

private slots:
    void closeWidget();

private:
    Ui::users *ui;
    Manage *w;
};

#endif // USERS_H

users.cpp:

#include "users.h"
#include "ui_users.h"
#include <QMessageBox>
#include "manage.h"

users::users(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::users)
{
    ui->setupUi(this);
    displayLogin();
    w = new Manage;
    connect(w, &Manage::registerUser, this, &users::closeWidget);
}

users::~users()
{
    delete ui;
}

void users::displayLogin()
{
    resize(420, 280);
    setWindowTitle("智能管家");
    setAutoFillBackground(true);
    QPalette palette = this->palette();
    QPixmap pixmap(":/user/image/image/OIP-C.jpg");
    palette.setBrush(QPalette::Window, QBrush(pixmap));
    setPalette(palette);
    setFixedSize(420, 280);
}

void users::closeWidget()
{
    this->close();
}
``
程序优化#include manageh#include usersh#include ui_manageh#include sqliteh#include regh#include QPushButton#include QLineEdit#include QSqlQuery#include QSqlDatabase#include QSqlError#include QMessageBox#i

原文地址: https://www.cveoy.top/t/topic/iw9S 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录