编写代码
时间: 2023-07-02 10:23:25 浏览: 157
以下是一个简单的 Qt C++ 代码示例,实现了用户登录和权限控制的功能:
```c++
#include <QtWidgets>
#include <QtSql>
class LoginDialog : public QDialog
{
public:
LoginDialog(QWidget *parent = nullptr) : QDialog(parent)
{
// 创建 UI 控件
QLabel *userLabel = new QLabel(tr("用户名:"));
QLabel *passwordLabel = new QLabel(tr("密码:"));
QLineEdit *userLineEdit = new QLineEdit;
QLineEdit *passwordLineEdit = new QLineEdit;
passwordLineEdit->setEchoMode(QLineEdit::Password);
QPushButton *loginButton = new QPushButton(tr("登录"));
// 布局 UI 控件
QFormLayout *formLayout = new QFormLayout;
formLayout->addRow(userLabel, userLineEdit);
formLayout->addRow(passwordLabel, passwordLineEdit);
QHBoxLayout *buttonLayout = new QHBoxLayout;
buttonLayout->addStretch();
buttonLayout->addWidget(loginButton);
buttonLayout->addStretch();
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addLayout(formLayout);
mainLayout->addLayout(buttonLayout);
setLayout(mainLayout);
// 连接数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("users.db");
if (!db.open())
{
QMessageBox::critical(this, tr("错误"), tr("无法打开数据库!"));
return;
}
// 处理登录按钮点击事件
connect(loginButton, &QPushButton::clicked, [=] {
QString user = userLineEdit->text().trimmed();
QString password = passwordLineEdit->text().trimmed();
QSqlQuery query;
query.prepare("SELECT * FROM users WHERE user=:user AND password=:password");
query.bindValue(":user", user);
query.bindValue(":password", password);
if (query.exec() && query.next())
{
// 登录成功,获取用户权限
int permission = query.value("permission").toInt();
accept();
emit loginSuccess(permission);
}
else
{
// 登录失败,提示错误信息
QMessageBox::critical(this, tr("错误"), tr("用户名或密码错误!"));
}
});
}
signals:
void loginSuccess(int permission);
};
class MainWindow : public QMainWindow
{
public:
MainWindow(QWidget *parent = nullptr) : QMainWindow(parent)
{
// 创建 UI 控件
QLabel *titleLabel = new QLabel(tr("欢迎使用系统"));
QLabel *permissionLabel = new QLabel;
QPushButton *logoutButton = new QPushButton(tr("注销"));
QPushButton *button1 = new QPushButton(tr("操作1"));
QPushButton *button2 = new QPushButton(tr("操作2"));
QPushButton *button3 = new QPushButton(tr("操作3"));
// 布局 UI 控件
QHBoxLayout *titleLayout = new QHBoxLayout;
titleLayout->addWidget(titleLabel);
titleLayout->addStretch();
titleLayout->addWidget(permissionLabel);
QVBoxLayout *buttonLayout = new QVBoxLayout;
buttonLayout->addWidget(button1);
buttonLayout->addWidget(button2);
buttonLayout->addWidget(button3);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addLayout(titleLayout);
mainLayout->addLayout(buttonLayout);
mainLayout->addWidget(logoutButton);
QWidget *centralWidget = new QWidget;
centralWidget->setLayout(mainLayout);
setCentralWidget(centralWidget);
// 处理注销按钮点击事件
connect(logoutButton, &QPushButton::clicked, [=] {
m_permission = 0;
titleLabel->setText(tr("欢迎使用系统"));
permissionLabel->setText("");
button1->setEnabled(false);
button2->setEnabled(false);
button3->setEnabled(false);
LoginDialog loginDialog(this);
connect(&loginDialog, &LoginDialog::loginSuccess, this, &MainWindow::onLoginSuccess);
loginDialog.exec();
});
// 初始化界面
logoutButton->click();
}
public slots:
void onLoginSuccess(int permission)
{
// 登录成功,根据用户权限控制界面操作
m_permission = permission;
titleLabel->setText(tr("欢迎使用系统,%1").arg(permission == 1 ? "管理员" : "普通用户"));
permissionLabel->setText(tr("权限:%1").arg(permission));
button1->setEnabled(permission >= 1);
button2->setEnabled(permission >= 2);
button3->setEnabled(permission >= 3);
}
private:
int m_permission;
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow mainWindow;
mainWindow.show();
return app.exec();
}
```
上述代码中,`LoginDialog` 类表示登录对话框,包含用户名、密码输入框和登录按钮,用户输入正确的用户名和密码后,发送登录成功信号,并附带用户权限信息。`MainWindow` 类表示主窗口,包含标题、权限信息、操作按钮和注销按钮,当用户点击注销按钮后,显示登录对话框并重新登录,登录成功后根据用户权限控制操作按钮的状态。在 `main` 函数中创建 `MainWindow` 对象并显示窗口。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![jnlp](https://img-home.csdnimg.cn/images/20250102104920.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://img-home.csdnimg.cn/images/20250102104920.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)