【问题标题】:QT application stops workingQT 应用程序停止工作
【发布时间】:2014-07-03 14:07:48
【问题描述】:

最近我有一个想法来提高我的编程技能,并尝试编写一个简单的应用程序,比如跳棋。从一开始我就遇到了一个问题,即我的应用程序在我生成一个新窗口“设置”后的几秒钟内停止工作。我注意到如果我注释掉我更改 MainWindow 类的玩家名称的行,这不会发生。 SettingsWindow 是 MainWindow 类的客人。这是一个代码。

#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 类时遇到分段错误。
  • 感谢 Oleg Olivson,我设法解决了这个问题。我没有设置变量 chng。菜鸟的错误,现在我有点惭愧。虽然非常感谢您的回答!
  • 考虑使用信号/槽机制而不是存储指向主窗口的指针(通常这是糟糕的设计)。另外,附带说明一下,通过常量引用而不是值传递对象:例如const QString &amp;player1 而不是构造函数中的 QString player1。尽管 Qt 的隐式共享可以防止创建额外的数据副本,但最好记住 ;)
  • 一般来说,存储哑指针是,嗯,哑。将QPointer 用于指向位于同一线程中的QObjects only 的弱指针(将它用于其他线程中的对象是错误的),QScopedPointerstd::unique_ptr 用于范围生命周期对象,以及QSharedPointerstd::shared_ptr 用于共享所有权对象。

标签: c++ qt crash


【解决方案1】:

如果没有从您的主窗口中查看代码,对我来说问题并不明显,但我确实注意到您的设置窗口也是从QMainWindow 派生的,这可能不是您想要的。您可能需要一个模态对话框,这意味着它应该派生自 QDialog,或者如果它是您主窗口中的永久居民,您可能需要一个 QDockWidget 子类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多