比较QString时出错

时间:2013-05-15 18:16:03

标签: c++ qt

我试图在Qt中编写一个简单的登录表单。如果用户名和密码正确,它应该打开另一个表单。 但它的表演真的很奇怪 继承我的代码:

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是我的对话框类的SLOT。它发出“showmanage”信号,打开我愿意打开的形式。 实际问题出在if语句中。我不明白为什么但是当它运行时它导致我的窗户崩溃。 这也不起作用:

void login::finduser()
{

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

    return;
}

我不知道我做错了什么 还有继承调试消息: 下级停止了,因为它收到了来自操作系统的信号 信号名称:sigsegv 信号含义:分段错误

1 个答案:

答案 0 :(得分:3)

QLineEdit * username  = new QLineEdit;

鉴于您没有收到编译错误,我假设您有一个未经初始化的成员变量username。但是在构造函数中,您声明了一个具有相同名称的新局部变量。块范围变量username与成员变量不同。