2013-05-15 75 views
0

即時通訊嘗試寫一個簡單的登錄表單在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 信號含義:分割故障

回答

3
QLineEdit * username = new QLineEdit; 

既然你沒有得到編譯錯誤,我假設你有一個uninitalised成員變量username。但在構造函數中,您聲明瞭一個具有相同名稱的新局部變量。塊範圍變量username與成員變量不同。

+0

是的。這是。我討厭自己:) – A73rnA

+0

沒有什麼好討厭的。我做得更糟更簡單的錯誤:) – Mahesh