使用QT更改一个widget对象中自己定义的公有成员变量出现的无法更改问题

数据刘 2016-11-28 07:01:19
本人是刚刚接触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);
}

//仅试验了客户这一块,出现了问题
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


多谢大神帮助,感激不尽
...全文
665 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 2016-12-02
  • 打赏
  • 举报
回复
引用 2 楼 CrazyKeyboardMan 的回复:
对的,在构造函数里。我发现问题了。
解决了记得及时结贴
数据刘 2016-12-01
  • 打赏
  • 举报
回复
对的,在构造函数里。我发现问题了。
小灸舞 2016-11-30
  • 打赏
  • 举报
回复
你显示ID的是这句ui->label->setText(tr("当前ID:%1").arg(ID));?
在构造函数里setText?

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧