当我尝试使用按钮添加QTabWidget时Appcrash

时间:2014-12-14 16:39:37

标签: c++ qt

我刚刚开始学习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");
 }

程序正常启动,但当我按下按钮添加新标签时,它会崩溃

请帮助我!

1 个答案:

答案 0 :(得分:1)

在构造函数中,您没有分配在标头中声明的QTabWidget和QPushButton实例,但是正在创建两个新的实例(具有相同的名称),这些实例将在范围的末尾消失。选项卡实例仍然是nullptr,当尝试在addT中解除它时,您的程序将崩溃。您需要分配给test.h中声明的变量,如下所示:

test::test() : tab(new QTabWidget(this), b(new QPushButton("Add", this) { ... }