学习记录-使用QTabWidget在析构时需要注意的问题
2017-04-22 13:41
585 查看
为了实现一个自定义的tab界面,使用QTabWidget和自定义的Tab,逐一将自定义的tab添加到QTabWidget上,并连接了切换tab的信号到自定义的槽函数上。结果在控件析构时软件死机,调试跟踪到在delete控件时出现了segmentfault,经一步调试发现,是在删除自定义tab控件时,本来不应该发射currentIndexChanged信号的,但是却在槽函数里收到了多次信号。仔细分析后,发现在析构时,先逐一删除tab导致每次减少一个tab触发了信号。因此,需要在析构这个控件前,将信号和槽函数断开连接,至此,问题解决。
LiProTabWidget::LiProTabWidget(QWidget *parent) :
QWidget(parent)
{
tabWidget = new QTabWidget();
tabWidget->setObjectName(QString::fromUtf8("tabWidget"));
tabWidget->setMinimumSize(QSize(400, 0));
tab1 = new LiProConTable();
tab1->setObjectName(QString::fromUtf8("tab1"));
tabWidget->addTab(tab1,QString::fromUtf8("数据配置1"));
tab2 = new LiProConTable();
tab2->setObjectName(QString::fromUtf8("tab2"));
tabWidget->addTab(tab2,QString::fromUtf8("数据配置2"));
tab3 = new LiProConTable();
tab3->setObjectName(QString::fromUtf8("tab3"));
tabWidget->addTab(tab3,QString::fromUtf8("数据配置3"));
tab4 = new LiProConTable();
tab4->setObjectName(QString::fromUtf8("tab4"));
tabWidget->addTab(tab4,QString::fromUtf8("数据配置4"));
//tabWidget->setCurrentIndex(0);
connect(tabWidget,SIGNAL(currentChanged(int)),this,SLOT(slotTabChanged(int)));
connect(tab1,SIGNAL(sigDataBufChanged(int)),this,SLOT(slotDataBufChanged(int)));
connect(tab2,SIGNAL(sigDataBufChanged(int)),this,SLOT(slotDataBufChanged(int)));
connect(tab3,SIGNAL(sigDataBufChanged(int)),this,SLOT(slotDataBufChanged(int)));
connect(tab4,SIGNAL(sigDataBufChanged(int)),this,SLOT(slotDataBufChanged(int)));
grid = new QGridLayout(this);
grid->addWidget(tabWidget);
this->setLayout(grid);
}
LiProTabWidget::~LiProTabWidget()
{
disconnect(tabWidget,SIGNAL(currentChanged(int)),this,SLOT(slotTabChanged(int)));
delete tab1;
delete tab2;
delete tab3;
delete tab4;
delete tabWidget;
}
LiProTabWidget::LiProTabWidget(QWidget *parent) :
QWidget(parent)
{
tabWidget = new QTabWidget();
tabWidget->setObjectName(QString::fromUtf8("tabWidget"));
tabWidget->setMinimumSize(QSize(400, 0));
tab1 = new LiProConTable();
tab1->setObjectName(QString::fromUtf8("tab1"));
tabWidget->addTab(tab1,QString::fromUtf8("数据配置1"));
tab2 = new LiProConTable();
tab2->setObjectName(QString::fromUtf8("tab2"));
tabWidget->addTab(tab2,QString::fromUtf8("数据配置2"));
tab3 = new LiProConTable();
tab3->setObjectName(QString::fromUtf8("tab3"));
tabWidget->addTab(tab3,QString::fromUtf8("数据配置3"));
tab4 = new LiProConTable();
tab4->setObjectName(QString::fromUtf8("tab4"));
tabWidget->addTab(tab4,QString::fromUtf8("数据配置4"));
//tabWidget->setCurrentIndex(0);
connect(tabWidget,SIGNAL(currentChanged(int)),this,SLOT(slotTabChanged(int)));
connect(tab1,SIGNAL(sigDataBufChanged(int)),this,SLOT(slotDataBufChanged(int)));
connect(tab2,SIGNAL(sigDataBufChanged(int)),this,SLOT(slotDataBufChanged(int)));
connect(tab3,SIGNAL(sigDataBufChanged(int)),this,SLOT(slotDataBufChanged(int)));
connect(tab4,SIGNAL(sigDataBufChanged(int)),this,SLOT(slotDataBufChanged(int)));
grid = new QGridLayout(this);
grid->addWidget(tabWidget);
this->setLayout(grid);
}
LiProTabWidget::~LiProTabWidget()
{
disconnect(tabWidget,SIGNAL(currentChanged(int)),this,SLOT(slotTabChanged(int)));
delete tab1;
delete tab2;
delete tab3;
delete tab4;
delete tabWidget;
}
相关文章推荐
- 【学习笔记】maven下多个web项目使用maven-war-plugin需要注意的问题
- 在使用微软提供的安全模版(安全策略)时需要注意的安全问题
- 今天开始使用这个blog来记录我的学习中遇到的问题吧
- 使用UL 列表结构建立横向导航栏需要注意的问题
- Hibernate中使用自定义insert,update,delete语句需要注意的问题
- 使用VS.NET需要注意的问题
- C++程序员在学习C#时需要注意的一些问题(一)
- 使用CHtmlView需要注意的问题之一
- 使用Spring的JndiObjectFactoryBean配置数据源时需要注意的问题
- 使用异常时需要注意的一些问题(转)
- 问题2:你使用过几种方式在网上发布信息?都有什么?你认为还有那些工具需要学习的?每问必答,长短不限
- [转]AppFuse中使用Oracle需要注意的问题
- 使用JSTL的标签是需要注意的几点问题
- 使用字节与字符串转换时需要注意的问题
- 调试使用了函数模块的程序时需要注意的一个小问题
- c#中ref和out参数使用时需要注意的问题
- 使用AR工具管理库文件需要注意的问题
- 使用jspSmartUpload包需要注意的问题
- linux下使用静态库需要注意的几个问题
- 一个使用手机时需要注意的问题