错误虽然比较QString

问题描述:

即时通讯尝试写一个简单的登录表单在Qt中。如果用户名和密码是正确的,它应该打开另一个表单。 但其演技很奇怪 继承人我的代码:错误虽然比较QString

login::login(QWidget *parent) : 
    QDialog(parent) 
{ 
    QPushButton * login_button = new QPushButton; 
    QPushButton * exit = new QPushButton; 
    login_button->setText("LOGIN"); 
    exit->setText("EXIT"); 

    QLineEdit * username = new QLineEdit; 
    QLineEdit * password = new QLineEdit; 
    QVBoxLayout * login_layout = new QVBoxLayout ; 
    QHBoxLayout * button_layout = new QHBoxLayout ; 
    username->setText("Enter Username ..."); 
    password->setText("Enter Password ... "); 

    exit->connect(exit,SIGNAL(pressed()),this , SLOT(close())); 
    login_layout->addWidget(username); 
    login_layout->addWidget(password); 

    button_layout->addWidget(login_button); 
    button_layout->addWidget(exit); 

    login_layout->addLayout(button_layout); 
    this->setLayout(login_layout); 

    this->connect(login_button,SIGNAL(clicked()),this,SLOT(finduser())); 
} 

void login::finduser() 
{ 

    if (username->text().compare("admin")) // <---- problem !! 
    emit showmanage() ; 

    return; 
} 

finduser是我的对话框类的插槽。它发出打开我愿意打开的表单的“显示管理”信号。 实际的问题是在if语句中。我不知道为什么,但它运行时会导致我的窗户崩溃。 这也行不通:

void login::finduser() 
{ 

    if (username->text()=="admin") // <---- problem !! 
    emit showmanage() ; 

    return; 
} 

我不知道什么即时做错了 也继承人的调试消息: 下停止,因为它recievd从操作系统 信号名称的信号:SIGSEGV 信号含义:分割故障

QLineEdit * username = new QLineEdit; 

既然你没有得到编译错误,我假设你有一个uninitalised成员变量username。但在构造函数中,您声明了一个具有相同名称的新局部变量。块范围变量username与成员变量不同。

+0

是的。这是。我讨厌自己:) – A73rnA

+0

没有什么好讨厌的。我做得更糟更简单的错误:) – Mahesh