Russian Qt Forum
Сентябрь 29, 2024, 20:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableWidget редактирование QTableWidgetItem  (Прочитано 5427 раз)
z11t3
Гость
« : Февраль 08, 2010, 06:52 »

Как изменить текст у item`a?
Создается так
Код
C++ (Qt)
QTableWidgetItem *item;
QStringList DataList;
...
for (int i = 0; i < rows; ++i)
{
for (int j = 0; j < Col_Position.size(); j++)
{
item = tableWidget->takeItem(i,j);
if (item != 0)
{
item->setText(DataList[tmpp++]);
tableWidget->setItem(i,j,item);
 
}
else
{tableWidget->setItem(i,j, new QTableWidgetItem(DataList[tmpp++]));}
 
}
}
 
 
освобождаю item от QTableWidget, указатель Не const.. вылетает на item->setText(DataList[tmpp++]);
Где ошибка?

P.S. Где-то в интернетах наткнулся на совет, изменять Items путём создания новых и уничтожение существующих.. << не предлогать
« Последнее редактирование: Февраль 08, 2010, 06:56 от z11t3 » Записан
z11t3
Гость
« Ответ #1 : Февраль 08, 2010, 07:28 »

Решено.  Смеющийся

Код
C++ (Qt)
item->setText(DataList[tmpp++]);
заменить на
Код
C++ (Qt)
item->setData(0,DataList[tmpp++]);
ибо нефих

Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #2 : Февраль 11, 2010, 00:04 »

1) setText должен корректно работать - 90% что вылетало из-за обращения к несуществующему элементу StringList
2) зачем вы используете takeItem - вообще в справку заглядывали зачем этот метод??? Вы вынаете из виджета итем, затем меняете его текст и засовываете обратно ---- ЗАЧЕМ?
3) Есть оператор item( row, column ); который дает указатель на нужный элемент дерева без его выдергивания из дерева - и при этом ЕСТЕСТВЕННО можно сделать setText !!!!!!!!

4) А вот удобная процедура для обращения к любому итему по X, Y - если его не было то он создастся
Код
C++ (Qt)
QTableWidgetItem * getItem(QTableWidget* tbl, int row, int column )
{
QTableWidgetItem *Item = tbl->item( row, column );
 
if ( Item )
return Item;
 
Item = new QTableWidgetItem();
tbl->setItem( row, column, Item );
return Item;
};


типа так:

getItem( pMyTreeWidget, 2, 0 )->setText( "CRAZY CRAZY CRAZY " );
getItem( pMyTreeWidget, 5, 10 )->setText( "CRAZY CRAZY CRAZY " );
getItem( pMyTreeWidget, 1, 3 )->setText( "CRAZY CRAZY CRAZY " );

лишь бы у таблицы колонок строк хватало (не помнб расширяется она автоматом или нет)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.186 секунд. Запросов: 22.