2011-05-16 171 views
0

当退出和清除QTreeWidget时,我的应用程序正在崩溃并伴有BAD_ACCESS。清除QTreeWidget时应用程序崩溃

这是我如何填充树的第一级:

std::set<UrlItem>::iterator i; 

for(i = crawler->getUrls()->begin() ; i != crawler->getUrls()->end() ; i++) { 
    QList<QString> cells; 
    cells.append(i->url); 
    cells.append(i->httpStatusMessage); 
    cells.append(QString("%1").arg(i->statusCode)); 

    QTreeWidgetItem *item = new QTreeWidgetItem(ui->resultTreeView, QStringList(cells)); 

    ui->resultTreeView->addTopLevelItem(item); 
} 

我相信,头项导致崩溃:

ui->resultTreeView->setHeaderItem(new QTreeWidgetItem(ui->resultTreeView, QStringList(headers))); 

我在做什么,使这个崩溃?动态分配的项目具有树形控件,因为它是父项,所以只能在树形控件时销毁。

回答

0

看来我是以错误的方式设置标题。

这工作得很好:

QList<QString> headers; 
headers.append(tr("Url")); 
headers.append(tr("Message")); 
headers.append(tr("Status code")); 

ui->resultTreeView->setHeaderLabels(QStringList(headers)); 

现在,setHeaderItem是应该做的,为什么它坠毁我的申请,我不知道,但上面的实现代码预期的效果。

+0

你可以使用'QStringList标题;标题<< tr(“Url”)<< ...'插入到标题中,这样你就不需要创建一个临时的QStringList。 (而QStringList实际上只是QList 的一个包装,无论如何都有一些更好的重载。) – RedX 2011-05-25 09:58:21

+0

@RedX - Nice!更干净。 – Raphael 2011-05-25 19:18:28