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
我會很感激任何幫助。
你是否在使用前設置了「chng」變量?如果沒有,當嘗試通過指針訪問MainWindow類時,您肯定會遇到Segmentation錯誤。 –
我設法處理它感謝Oleg Olivson。我沒有設置變量chng。菜鳥的錯誤,現在我有點慚愧。儘管謝謝很多答案! – user3590878
考慮使用信號/插槽機制而不是存儲指向主窗口的指針(通常這是糟糕的設計)。另外,在附註中,通過常量引用而不是按值傳遞對象:例如'const QString&player1'而不是'QString player1'在你的構造函數中。雖然Qt的隱式共享可以防止創建額外的數據副本,但記住這一點是很好的;) – kambala