关于Qt QListWidget 清空所有项出现的问题

27 篇文章 0 订阅
14 篇文章 0 订阅

有时候我们QListWidet的时候刚开始加载了很多个item,但是可能到后面要清空所有的item,重新加载。例如:我在项目中实现了多国语言,在切换了语言之后,需要将界面重新加载的,这就需要重新加载QListWidget的每一项了。

但是在清楚QListWidget的时候,无论调用什么方式总是会出现段错误。

//方法一:
ui->listWidget->clear();
// 结果:出现段错误
//方法二:
void deleteAllSlot()
{
    int counter = ui->cityListWidget->count();
    qDebug() << "count is " <<counter;

    QListWidgetItem *item;
    for(int index = 0;index <counter;index++)
    {
        item = ui->cityListWidget->takeItem(0);
        if(item !=NULL)
            delete item;
        qDebug() << "index is " <<index;
    }
// 结果:在删除最后一项的时候发生段错误

相信大部分人在使用QListWidget时都会遇到这种情况。这是因为在执行清空QListWidget前,应该是使用connect将,QListWidge的信号与某个槽函数链接在一起了。

//例如:
connect(ui->listWidget, 
    SIGNAL(itemActivated(QListWidgetItem *)), this, SLOT(activatedItem(QListWidgetItem *)));

connect(ui->listWidget, 
SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), 
this, SLOT(ChangedItem(QListWidgetItem*,QListWidgetItem*)));

当把QListWidget中的信号和某个槽函数链接在一起的时候,在清空QListWidge时就会发生段错误,所以我们在清空QListWidget之前应该把链接上的信号和槽解除链接,调用disconnect函数。在清空完QListWidge之后,我们在把相应的信号和槽链接起来,这样就不会出现段错误了,成功清空了QListWidget

// 例如:

// 解除绑定
disconnect(ui->listWidget, SIGNAL(itemActivated(QListWidgetItem *)), 
this, SLOT(activatedItem(QListWidgetItem *)));

disconnect(ui->listWidget, 
SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), 
this, SLOT(ChangedItem(QListWidgetItem*,QListWidgetItem*)));


ui->listWidget->clear()//执行清空操作


// 重新绑定信号和槽
connect(ui->listWidget, 
    SIGNAL(itemActivated(QListWidgetItem *)), 
    this, SLOT(activatedItem(QListWidgetItem *)));

connect(ui->listWidget, 
SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), 
this, SLOT(ChangedItem(QListWidgetItem*,QListWidgetItem*)));
  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值