crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QTableWidget дописать значение к ячейке.
smartchecker
  опции профиля:
сообщение 1.12.2011, 14:20
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 83
Регистрация: 7.9.2011
Пользователь №: 2853

Спасибо сказали: 0 раз(а)




Репутация:   0  


Как в QTableWidget дописать значение к ячейке когда там что-то уже есть?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 1.12.2011, 16:29
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

Спасибо сказали: 40 раз(а)




Репутация:   6  


Ну вариант "в лоб"
QTableWidget::setItem(column, row, new QTableWidgetItem(QTableWidget::itemAt(column, row).text().append(" Значение")))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
smartchecker
  опции профиля:
сообщение 2.12.2011, 21:47
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 83
Регистрация: 7.9.2011
Пользователь №: 2853

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(silver47 @ 1.12.2011, 17:29) *
Ну вариант "в лоб"
QTableWidget::setItem(column, row, new QTableWidgetItem(QTableWidget::itemAt(column, row).text().append(" Значение")))

Вот меня тут смущает очередной new QTableWidgetItem
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BlueIceScream
  опции профиля:
сообщение 2.12.2011, 23:30
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 56
Регистрация: 21.11.2011
Из: Республика Дагестан
Пользователь №: 3016

Спасибо сказали: 18 раз(а)




Репутация:   3  


Создавая оператором new новый объект и устанавливая его взамен старого вы теряете самое ценное - указатель на старый объект. Это приведет к утечке памяти(если конечно QTableWidget не использует специальные механизмы корректной замены. А он их не использует в любом случае, иначе сам виджет определял бы какие данные нужны, а какие нет).

Если вопрос состоит в простом дополнении значения ячейки, то почему бы не использовать следующий код :

QString tempStr = <table widget>->item(<row><col>)->text();
tempSt.append("<text>");
<table widget>->item(<row><col>)->setText(tempSt);



Вы можете использовать предыдущий вариант. Однако вы должны сами корректно удалить старый объект, а затем устанавливать новый. Однако предложенный мной метод не требует использования тяжеловесного оператора new(и соответственно delete для удаления старого объекта) и более логичен.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 3.12.2011, 9:07
Сообщение #5


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

Спасибо сказали: 40 раз(а)




Репутация:   6  


Цитата
Это приведет к утечке памяти


Уже обсуждалось. Это не приведет к утечке памяти и нет нужды уничтожать все QTableWidgetItem вручную.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BlueIceScream
  опции профиля:
сообщение 3.12.2011, 14:01
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 56
Регистрация: 21.11.2011
Из: Республика Дагестан
Пользователь №: 3016

Спасибо сказали: 18 раз(а)




Репутация:   3  


Да, действительно утечки памяти нет. Valgrind ничего подозрительного не заметил. Однако то, что сам QTableWidget при замене решает какие элементы модели нужны, а какие больше нет интересная особенность.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 5.12.2011, 5:05
Сообщение #7


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

Спасибо сказали: 40 раз(а)




Репутация:   6  


Сталкивался с этим с год назад. Тоже пытался удалять элементы созданные через new и поставленные в QTableWidget. Как оказалось QTableWidget умная штука и берет на себя управление памятью над всеми элементами, помещенными в него.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 18.2.2025, 7:29