QTableWidget работает значительно медленнее во второй раз, когда он заполняется.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 QTableWidget работает значительно медленнее во второй раз, когда он заполняется.

Сообщение Гость »

КОД:

Код: Выделить всё

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);
решает проблему, но теперь возникает другая проблема; Установка количества строк на «0», по-видимому, не удаляет выделенную кучу QTableWidgetItems, а просто оставляет право собственности на элементы, поэтому возникает утечка памяти. (по крайней мере, я так думаю...)
Документация Qt в QTableWidget довольно расплывчата, поэтому я точно не знаю, что на самом деле делаетclearContents(). В документации написано «Удаляет из представления все элементы, не находящиеся в заголовках», поэтому у меня возник вопрос: содержимое таблицы просто скрывается? Его удаляют? Я не совсем уверен. Моя теория заключается в том, что функцияclearContents() только скрывает элементы, и любые последующие попытки заполнить таблицу фактически удаляют и удаляют каждый элемент, а затем выделяют новый для установки в таблице, что, в свою очередь, является дорогостоящей операцией.
Еще одна интересная вещь: документация Qt по QTableWidget предполагает, что правильный способ заполнения QTableWidget — это выделить QTableWidgetItem в куче, а затем установить его в ячейке таблицы с помощью setItem(). Точно так же, как я представил в приведенном выше коде, который мне кажется странным...
В заключение:
Есть ли альтернативный способ заполнения и повторного заполнения таблицы Qt без всех этих проблем? Если нет, есть ли способ решить эти проблемы?

Подробнее здесь: https://stackoverflow.com/questions/101 ... -populated
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»