我刚刚开始学习Qt几天前,我遇到了一个无法解决的问题。
首先是文件:
的main.cpp
#include <QApplication>
#include "test.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
test w;
w.show();
return a.exec();
}
test.h
#ifndef TEST_H
#define TEST_H
#include <QWidget>
#include <QTabWidget>
#include <QTextEdit>
#include <QPushButton>
class test : public QWidget
{
Q_OBJECT
public:
test();
~test();
private slots:
void addT();
private :
QTabWidget *tab;
QPushButton *b,*c;
};
#endif // TEST_H
和test.cpp
#include "test.h"
test::test()
{
QTabWidget *tab = new QTabWidget(this);
QPushButton *b = new QPushButton("Add",this);
tab->addTab(b,"test");
QObject::connect(b,SIGNAL(clicked()),this,SLOT(addT()));
}
test::~test()
{
}
void test::addT()
{
QPushButton *c= new QPushButton("Add",this);
tab->addTab(c,"test");
}
程序正常启动,但当我按下按钮添加新标签时,它会崩溃
请帮助我!
答案 0 :(得分:1)
在构造函数中,您没有分配在标头中声明的QTabWidget和QPushButton实例,但是正在创建两个新的实例(具有相同的名称),这些实例将在范围的末尾消失。选项卡实例仍然是nullptr,当尝试在addT中解除它时,您的程序将崩溃。您需要分配给test.h中声明的变量,如下所示:
test::test() : tab(new QTabWidget(this), b(new QPushButton("Add", this) {
...
}