QT——QTabWidget与QPushButton合用关闭时报错问题

使用Qt做了一个界面,里面有一个tabWidget,包含两个子页面,还有另一个按钮,切换TabWidget页面时,按钮上的文字随着页面改变。
可是关闭软件时发现程序会异常退出,没找到原因,后来领导给我讲了问题原因,虽然这种问题不常出现,但还是写篇文章记录一下。

#include "widget.h"
#include <QHBoxLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    this->setFixedSize(400, 300);

    m_tabWgt.addTab(&m_leftWgt, "First");
    m_tabWgt.addTab(&m_rightWgt, "Second");
    m_tabWgt.setCurrentIndex(1);

    QHBoxLayout *lay = new QHBoxLayout(this);
    lay->addWidget(&m_tabWgt);
    lay->addWidget(&m_shouBtn);

    setText();

    connect(&m_tabWgt, &QTabWidget::currentChanged, this, &Widget::onCurrentChanged);
}

Widget::~Widget()
{

}

void Widget::onCurrentChanged(int index)
{
    setText();
}

void Widget::setText()
{
    int curIndex = m_tabWgt.currentIndex();
    if(curIndex == 0)
    {
        m_shouBtn.setText("First");
    }
    else if(curIndex == 1)
    {
        m_shouBtn.setText("Second");
    }
}

类的成员声明顺序如下:

private:
    QTabWidget m_tabWgt;
    QWidget m_leftWgt;
    QWidget m_rightWgt;
    QPushButton m_shouBtn;

成员的析构顺序为声明逆序,先将btn析构掉,再析构Tab页时,会进入设置文字函数,此时btn无效,设置文字程序就会引发异常,如下
在这里插入图片描述
修改方法有两种,第一种是将m_showBtn写在成员m_tabWidget前面,这样先析构tab页,析构时会进入切换页面,此时按钮还是有效的,依然可以设置文字。
第二种修改方法是在析构函数中加入m_tab.clear(), 先将tab的子选项卡都清除掉(不会delete),清除的时候进入切换函数此时可以正常设置按钮文字(选项卡有2个,会进两次切换函数),析构m_tabWgt的时候就不会再进页面切换函数了,之后再析构m_showBtn.

Widget::~Widget()
{
    m_tabWgt.clear();
}

程序正常退出:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值