QT 程序在 connect() 后崩溃

Posted

技术标签:

【中文标题】QT 程序在 connect() 后崩溃【英文标题】:QT program crashes after connect() 【发布时间】:2015-03-14 12:13:19 【问题描述】:

我正在尝试编写我的新应用,但每次按下 QDialog 上的按钮时它都会崩溃。

这是我的代码:

主窗口.h

#include <QMainWindow>
#include "creatlist.h"

namespace Ui 
class MainWindow;



class MainWindow : public QMainWindow

    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    QDialog* creatList;

public slots:
    void tableFull()
      ...some code here...
     

private:
    Ui::MainWindow *ui;
;

creatlist.h:

#include <QDialog>
#include "mainwindow.h"

namespace Ui 
class creatlist;


class MainWindow;

class creatlist : public QDialog

    Q_OBJECT

public:
    explicit creatlist(QWidget *parent = 0);
    ~creatlist();
    MainWindow* mainwindow;
signals:
    void updateList();

public slots:
    void ready()
       ///////////////////////////////////////////////////////////crash
     connect(this,SIGNAL(updateList()),mainwindow,SLOT(tableFull()));
     emit updateList();

   

private:
    Ui::creatlist *ui;
;

如果我尝试发送一些信号,我的应用会因分段错误而崩溃。

我做到了:

void creatlist::ready()

mainwindow = new MainWindow(this);
emit mainwindow->linktableFull();

但如果我尝试在 linktableFull() 中执行 QTextBroser.append("hue hue");,QTextBrowser 始终为空。

【问题讨论】:

显然,mainwindow 并不指向任何MainWindow 的实例。 学会使用你的调试器,你会立刻找到问题的根源。 您可以通过发布崩溃信息来改进您的问题(从终端或调试器启动程序会提供更多信息) 【参考方案1】:

您的 QTextBrowser 始终为空,因为您在每个 ready() 函数中创建了新的 mainwindow 对象。您应该创建一次主窗口对象并在整个代码中使用相同的 mainwindow 对象。您可以在 creatlist 构造函数中创建新的 mainwindow 对象。

【讨论】:

以上是关于QT 程序在 connect() 后崩溃的主要内容,如果未能解决你的问题,请参考以下文章

来自网站的崩溃加载图像[重复]

关于QT中UDP的连接问题

添加库后qt应用程序在启动时崩溃

QT 5.6.1 应用程序在退出插槽后仅在 x86 架构而不是 x64 上崩溃

构建后带有 net-snmp 的 C++ Qt5 崩溃

Qt关闭QMainWindow后如何防止崩溃?