• 9233阅读
  • 5回复

QListWidget 清楚item的问题 [复制链接]

上一主题 下一主题
离线xlttap
 

只看楼主 倒序阅读 楼主  发表于: 2010-05-14
用QListWidget的clear()方法来清空所有的QListWidgetItem时出错。
    QString path = currentPath() + "/" +item->text();
    QFileInfo info(path);
    if (info.isDir()) {
        pathLineEdit->setText(path);
        itemListView->clear();  // 这里出问题。
        QStringList sl = fileAndFolders(path);
        if (filterComboBox->currentIndex() == 0)
            itemListView->addItems(sl);
        else {
            foreach(QString string,sl) {
                QFileInfo info(string);
                if (info.suffix() == "loc")
                    itemListView->addItem(string);
            }
        }
    }

后来,自己写一个循环来delete所有的QListWidgetItem,有时也出错:
    int i = 0;
    int c = itemListView->count();
    while (true) {
        i++;
        if (i > c) break;
        if (itemListView->item(0) != NULL) {
            qDebug() << itemListView->item(0)->text(); //这是能正常打印
            delete itemListView->item(0);  // 当delete最后一个时,偶尔出问题,程序莫名死了退出(大部分没问题)。
        }
    }

请问大家遇到过这样的问题吗?
我简单我快乐
离线xlttap

只看该作者 1楼 发表于: 2010-05-14
我的Qt版本是4.4.3
我简单我快乐
离线xlttap

只看该作者 2楼 发表于: 2010-05-14
void QListWidget::clear ()   [slot]
Removes all items and selections in the view.
Note: All items will be permanently deleted.
我不知道问题在哪,看了源码也没什么问题的啊。但就是出错。
我简单我快乐
离线paranoid
只看该作者 3楼 发表于: 2010-05-14
不清楚clear为什么会有问题,但显然你自己写的delete有问题,起码应该
QListWidgetItem *item = itemListView->takeItem(0);
delete item;
离线xlttap

只看该作者 4楼 发表于: 2010-05-14
引用第3楼paranoid于2010-05-14 15:35发表的  :
不清楚clear为什么会有问题,但显然你自己写的delete有问题,起码应该
QListWidgetItem *item = itemListView->takeItem(0);
delete item;

呵呵,用delete item(0)也没有问题,不信你试试。
delete itemListView->item(0)会在delete后自动从QListWidget中移除。
当QListWidget中delete到只有一个QListWidgetItem时,delete itemListView->item(0)或者delete itemListView->takeItem(0)都会出问题。
我简单我快乐
离线paranoid
只看该作者 5楼 发表于: 2010-05-14
嗯,是可以直接delete。看来问题不在这儿,我试了手动添加,删除(clear以及用你的方法)QListWidget 的item都没有问题
你也先试试手动,自己添加几个,再删除,看结果会怎样
快速回复
限100 字节
 
上一个 下一个