2013-05-15 3 views
0

im пытается написать простую форму журнала в Qt. он должен открыть другую форму, если имя пользователя и пароль правильные. но его действия действительно странно Heres мой код:ошибка при сравнении 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 является SLOT для моего диалогового класса. он выдает сигнал «showmanage», который открывает форму, которую он хочет открыть. Фактическая проблема заключается в выражении if. я понятия не имею, почему, но когда он работает, это приводит к сбою моих окон. это также не работает:

void login::finduser() 
{ 

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

    return; 
} 

я понятия не имею, что им делать неправильно также Heres сообщение отладки: низшая остановился, потому что recievd сигнал от операционной системы имени сигнала: SIGSEGV Значение сигнала: сегментация вина

ответ

3
QLineEdit * username = new QLineEdit; 

Учитывая, что вы не получаете ошибки компиляции, я предполагаю, что у вас есть uninitalised переменную-член username. Но в конструкторе вы объявили новую локальную переменную с тем же именем. Переменная диапазона с областью username отличается от переменной-члена.

+0

Да. это было так. я ненавижу себя :) – A73rnA

+0

Не о чем ненавидеть. Я делаю намного хуже простые ошибки :) – Mahesh

Смежные вопросы