为什么我的Qt程序在尝试获取“当前设置”时会崩溃?

时间:2015-08-04 16:12:53

标签: c++ qt

我在终端示例中将我的代码的这一部分基于。当我更新主窗口中的字段时,我不是将生成的字符串存储在结构中,那么当在我的辅助源中调用命令时,我想使用传递的字符串。

在我的main.h中我有

struct Settings {
        QString Id;
    };Settings settings() const;
private:
    Ui::MainWindow *ui;
    Settings currentSettings;

在我的main.cpp中是设置Id

值的代码
void MainWindow::on_comboBox_currentTextChanged(const QString &arg1)
{
    QString Data = arg1;
    if (arg1 == "Universal"){
        Data = "xxx";
    }
    else{
        Data = Format_Class::format_3(Data);
    }
    currentSettings.Id = Data;
}

MainWindow::Settings MainWindow::settings() const
{
    return currentSettings;
}

此代码有效,因为currentsettings id设置为正确的值。

在我的模式中。我有

namespace Ui {
class Mode;
}

class MainWindow;
class Mode : public QDialog
{
    Q_OBJECT

public:
    explicit Mode(QWidget *parent = 0);
    ~Mode();

private:
    Ui::Mode *ui;
    MainWindow *settings;
};

然后在我的mode.cpp中,实际使用我拥有的数据的页面

void Mode::on_pushButton_clicked()//ok
{
    MainWindow::Settings p = settings -> settings();
    QString hash = "#";
    QString end = "\r";
    QString identifier = (p.Id);

函数转到

MainWindow::Settings p = settings -> settings();

发生致命错误并崩溃。在调试模式下调用return currentsettings时,currentSettings / id为<not accessible>,此后程序崩溃。

程序崩溃时发生的错误是

收到信号

下级因为收到来自操作系统的信号而停止了

信号名称:SIGSEGV 信号含义:分段故障

1 个答案:

答案 0 :(得分:0)

在模式中,你有:

void Mode::on_pushButton_clicked()//ok
{
    MainWindow::Settings p = settings -> settings();

您确定初始化Mode的settings变量吗?将此类型指定为settings时,将此变量命名为MainWindow*似乎很奇怪。