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

Appcrash when i try to add QTabWidget with a button

本文关键字:QTabWidget 添加 Appcrash 按钮      更新时间:2023-10-16

我几天前刚开始学习Qt,我有一个无法解决的问题。

首先是文件:

主.cpp

#include <QApplication>
#include "test.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
test w;
w.show();
return a.exec();
}

测试.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

和测试.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");
 }

程序正常启动,但是当我按下按钮添加新选项卡时,它崩溃了

请帮助我!

在构造函数中,您不会分配给标头中声明的 QTabWidget 和 QPushButton 实例,而是创建两个新实例(具有相同的名称),这些实例将在作用域结束时消失。选项卡实例仍然是一个 nullptr,当尝试在 addT 中取消引用它时,您的程序将崩溃。您需要像这样分配给 test.h 中声明的变量:

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