2011-05-16 170 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