本人是刚刚接触Qt不久的小菜鸡,弄了一个简单地操作数据库的程序,其中登录需要根据不同角色显示不同的窗口,并把登录账号作为参数传递到子窗口(因为后面我打算设计一个修改密码的功能),我的思路是:创建两个Qt设计师界面类的对象:Login和Customer,Login作登录窗口,其中定义客户窗口Customer c;而在Customer中我定义一个int型的公有成员变量ID,用来存储当前登录的用户ID(就是登录账号);登录窗口的登录按钮的槽函数会根据选择的角色以及输入的账号和密码是否正确来选择显示相应的操作界面(在这里我仅仅做了客户的),然后将成功登录时使用的ID,直接赋值给c.ID,然后关闭登录界面。
但是在我的试验中,我想把这个值显示在一个标签中,却在c窗口中显示是一个随机数,而我直接用c.ID=500,得到的结果依然是标签中显示的还是一个随机数,这也就意味着**我直接给公有成员变量赋值的语句根本没有起作用**,这是为什么,我又该怎么解决这个问题。我的数据库链接是成功的,而且登录功能已经能够实现。最关键的是**这个是可以通过编译,只是运行时无法达到功能**
以下是我的部分代码(主函数和连接数据库的文件我就不发了):
#ifndef LOGIN_H
#define LOGIN_H
#include <QWidget>
#include <customer.h>
namespace Ui {
class Login;
}
class Login : public QWidget
{
Q_OBJECT
public:
explicit Login(QWidget *parent = 0);
~Login();
private slots:
void on_pushButton_clicked();
private:
Ui::Login *ui;
Customer c;
};
#endif // LOGIN_H
#include "login.h"
#include "ui_login.h"
#include <QMessageBox>
#include <QSql>
#include <QSqlQuery>
Login::Login(QWidget *parent) :
QWidget(parent),
ui(new Ui::Login)
{
ui->setupUi(this);
}
Login::~Login()
{
delete ui;
}
void Login::on_pushButton_clicked()
{
if(ui->comboBox->currentText()==tr("请选择登录角色"))
{
QMessageBox::critical(0,tr("登录失败"),tr("请选择正确的登录角色"),QMessageBox::Cancel);
}
if(ui->comboBox->currentText()==tr("超级管理员登录"))
{
QSqlQuery query;
bool suc=false;
query.exec("SELECT * FROM Administrator");
while(query.next())
{
if((query.value(0).toString()==ui->AdminEdit->text())&&(query.value(1).toString()==ui->PasswordEdit->text()))
{
QMessageBox::information(0,tr("登陆成功"),tr("超级管理员:%1 登陆成功").arg(query.value(0).toString()));
this->close();
suc=true;
break;
}
}
if(!suc)
QMessageBox::critical(0,tr("登录失败"),tr("账号或密码错误"),QMessageBox::Cancel);
}
if(ui->comboBox->currentText()==tr("调度管理员登录"))
{
QSqlQuery query;
bool suc=false;
query.exec("SELECT * FROM Dispatcher");
while(query.next())
{
if((query.value(0).toString()==ui->AdminEdit->text())&&(query.value(1).toString()==ui->PasswordEdit->text()))
{
QMessageBox::information(0,tr("登陆成功"),tr("调度管理员:%1 登陆成功").arg(query.value(2).toString()));
this->close();
suc=true;
break;
}
}
if(!suc)
QMessageBox::critical(0,tr("登录失败"),tr("账号或密码错误"),QMessageBox::Cancel);
}
if(ui->comboBox->currentText()==tr("车队管理员登录"))
{
QSqlQuery query;
bool suc=false;
query.exec("SELECT * FROM Manager");
while(query.next())
{
if((query.value(0).toString()==ui->AdminEdit->text())&&(query.value(1).toString()==ui->PasswordEdit->text()))
{
QMessageBox::information(0,tr("登陆成功"),tr("车队管理员:%1 登陆成功").arg(query.value(2).toString()));
this->close();
suc=true;
break;
}
}
if(!suc)
QMessageBox::critical(0,tr("登录失败"),tr("账号或密码错误"),QMessageBox::Cancel);
}
[color=#FF0000]//仅试验了客户这一块,出现了问题
if(ui->comboBox->currentText()==tr("客户登录"))
{
QSqlQuery query;
bool suc=false;
query.exec("SELECT * FROM Customers");
while(query.next())
{
if((query.value(0).toString()==ui->AdminEdit->text())&&(query.value(1).toString()==ui->PasswordEdit->text()))
{
QMessageBox::information(0,tr("登陆成功"),tr("客户:%1 登陆成功").arg(query.value(2).toString()));
this->close();
//c.ID=query.value(0).toInt();
c.ID=10000;
suc=true;
break;
}
}
if(suc)
{
c.show();
}
else
QMessageBox::critical(0,tr("登录失败"),tr("账号或密码错误"),QMessageBox::Cancel);
}
}
//Login.cpp
#ifndef CUSTOMER_H
#define CUSTOMER_H
#include <QWidget>
namespace Ui {
class Customer;
}
class Customer : public QWidget
{
Q_OBJECT
public:
int ID;
explicit Customer(QWidget *parent = 0);
~Customer();
private:
Ui::Customer *ui;
};
#endif // CUSTOMER_H
#include "customer.h"
#include "ui_customer.h"
Customer::Customer(QWidget *parent) :
QWidget(parent),
ui(new Ui::Customer)
{
ui->setupUi(this);
ui->label->setText(tr("当前ID:%1").arg(ID));
}
Customer::~Customer()
{
delete ui;
}
//Customer.cpp
多谢大神帮助,感激不尽