2014-07-03 170 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子类。