Russian Qt Forum

Qt => Общие вопросы => Тема начата: z11t3 от Февраль 08, 2010, 06:52



Название: QTableWidget редактирование QTableWidgetItem
Отправлено: 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 путём создания новых и уничтожение существующих.. << не предлогать


Название: Re: QTableWidget редактирование QTableWidgetItem
Отправлено: z11t3 от Февраль 08, 2010, 07:28
Решено.  ;D

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



Название: Re: QTableWidget редактирование QTableWidgetItem
Отправлено: break от Февраль 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 " );

лишь бы у таблицы колонок строк хватало (не помнб расширяется она автоматом или нет)