程序优化#include manageh#include usersh#include ui_manageh#include sqliteh#include regh#include QPushButton#include QLineEdit#include QSqlQuery#include QSqlDatabase#include QSqlError#include QMessageBox#i
程序优化的几个方面:
-
减少不必要的头文件引用:在manage.cpp文件中,只使用了manage.h、users.h、ui_manage.h、sqlite.h和reg.h这几个头文件,可以将其他不必要的头文件引用删除,以减少编译时间和内存占用。
-
减少重复的信号槽连接:在manage.cpp文件中,loginon和registe按钮的点击事件都连接了closeButtonClicked信号,可以将这两个按钮的点击事件合并为一个槽函数,只连接一次信号。
-
使用预处理器宏定义:在manage.h文件中,可以使用#ifndef、#define和#endif预处理器宏定义来避免重复引用头文件的问题。
-
合理使用指针和对象的创建和销毁:在users.cpp文件中,可以将Manage对象的创建和销毁操作放在需要使用的地方,而不是在users构造函数中创建和在closeWidget槽函数中销毁。
-
使用const修饰不会修改的参数:在loginUser函数中,username和passwd参数不会被修改,可以使用const修饰,增加代码的可读性。
-
使用QSqlQuery::value函数获取查询结果:在loginUser函数中,可以使用QSqlQuery::value函数获取查询结果,而不是使用QSqlQuery::next函数判断查询结果是否存在。
-
减少不必要的调试输出:在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();
}
``
原文地址: https://www.cveoy.top/t/topic/iw9S 著作权归作者所有。请勿转载和采集!