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() 后崩溃的主要内容,如果未能解决你的问题,请参考以下文章