Код: Выделить всё
populateTable()
{
tableWidget->clearContents();
tableWidget->setRowCount(stringList.size());
for(int i = 0; i < stringList.size(); ++i)
{
tableWidget->setItem(i, 0, new QTableWidgetItem(stringList.at(i)));
}
}
При первом запуске populateTable() все в порядке. Но в следующий раз он будет работать значительно медленнее, чем раньше.
ОБСУЖДЕНИЕ:
Я подозреваю, что после тщательного тестирования ClearContents() может быть проблемой. Потому что просто изменив код:
Код: Выделить всё
tableWidget->clearContents();
Код: Выделить всё
tableWidget->setRowCount(0);
Документация Qt в QTableWidget довольно расплывчата, поэтому я точно не знаю, что на самом деле делаетclearContents(). В документации написано «Удаляет из представления все элементы, не находящиеся в заголовках», поэтому у меня возник вопрос: содержимое таблицы просто скрывается? Его удаляют? Я не совсем уверен. Моя теория заключается в том, что функцияclearContents() только скрывает элементы, и любые последующие попытки заполнить таблицу фактически удаляют и удаляют каждый элемент, а затем выделяют новый для установки в таблице, что, в свою очередь, является дорогостоящей операцией.
Еще одна интересная вещь: документация Qt по QTableWidget предполагает, что правильный способ заполнения QTableWidget — это выделить QTableWidgetItem в куче, а затем установить его в ячейке таблицы с помощью setItem(). Точно так же, как я представил в приведенном выше коде, который мне кажется странным...
В заключение:
Есть ли альтернативный способ заполнения и повторного заполнения таблицы Qt без всех этих проблем? Если нет, есть ли способ решить эти проблемы?
Подробнее здесь: https://stackoverflow.com/questions/101 ... -populated