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