Приложение вылетает при очистке 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)));

Что я делаю, чтобы вызвать этот сбой? Элемент, который выделяется динамически, имеет виджет-дерево в качестве родительского, поэтому его следует уничтожать только тогда, когда виджет-дерево находится.


person Raphael    schedule 16.05.2011    source источник


Ответы (1)


Кажется, я неправильно установил заголовок.

Это отлично работает:

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

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

Теперь, что должен был сделать setHeaderItem и почему он привел к сбою моего приложения, я не знаю, но приведенный выше код достиг желаемого эффекта.

person Raphael    schedule 25.05.2011
comment
Вы можете использовать QStringList headers; headers << tr("Url") << ... для вставки в заголовки, таким образом вам не нужно создавать временный QStringList. (И QStringList фактически является только оболочкой для QList ‹QString› в любом случае с некоторыми более приятными перегрузками.) - person RedX; 25.05.2011