2014-07-03 217 views
0

最近我有一個想法來處理我的編程技巧,並嘗試編寫一個簡單的應用程序,如跳棋。開始後不久,我遇到了一個問題,這是我的應用程序停止工作,幾秒鐘後,我生成一個新的窗口「設置」。我注意到,如果我註釋掉我改變MainWindow類的玩家名字的行,就不會發生這種情況。 SettingsWindow是MainWindow類中的一個訪客。這是一個代碼。QT應用程序停止工作

#include "settingswindow.h" 
#include "ui_settingswindow.h" 

settingsWindow::settingsWindow(QWidget *parent, QString player1, QString player2) : 
    QMainWindow(parent), 
    ui(new Ui::settingsWindow) 
{ 
    ui->setupUi(this); 
    ui->lineEdit_P1->text()=player1; 
    ui->lineEdit_P2->text()=player2; 

} 

settingsWindow::~settingsWindow() 
{ 
    delete ui; 
} 

void settingsWindow::on_lineEdit_P1_editingFinished() 
{ 
    chng->player1_Name = ui->lineEdit_P1->text(); 
} 

void settingsWindow::on_lineEdit_P2_editingFinished() 
{ 
    chng->player2_Name = ui->lineEdit_P2->text(); 
} 

和頭文件。

#ifndef SETTINGSWINDOW_H 
#define SETTINGSWINDOW_H 

#include <QMainWindow> 
#include "mainwindow.h" 
class MainWindow; 

namespace Ui { 
class settingsWindow; 
} 

class settingsWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit settingsWindow(QWidget *parent = 0); 
    explicit settingsWindow(QWidget *parent, QString player1, QString player2); 
    ~settingsWindow(); 

private slots: 
    void on_lineEdit_P1_editingFinished(); 

    void on_lineEdit_P2_editingFinished(); 

private: 
    Ui::settingsWindow *ui; 
    MainWindow *chng; 
}; 

#endif // SETTINGSWINDOW_H 

我會很感激任何幫助。

+0

你是否在使用前設置了「chng」變量?如果沒有,當嘗試通過指針訪問MainWindow類時,您肯定會遇到Segmentation錯誤。 –

+0

我設法處理它感謝Oleg Olivson。我沒有設置變量chng。菜鳥的錯誤,現在我有點慚愧。儘管謝謝很多答案! – user3590878

+0

考慮使用信號/插槽機制而不是存儲指向主窗口的指針(通常這是糟糕的設計)。另外,在附註中,通過常量引用而不是按值傳遞對象:例如'const QString&player1'而不是'QString player1'在你的構造函數中。雖然Qt的隱式共享可以防止創建額外的數據副本,但記住這一點是很好的;) – kambala

回答

0

對於我來說這個問題在沒有看到主窗口代碼的情況下並不明顯,但是我注意到您的設置窗口也是從QMainWindow派生的,這可能不是您想要的。您可能需要一個模式對話框,這意味着它應該來自QDialog,或者如果它是永久居民在您的主窗口中,您可能需要一個QDockWidget子類。