Russian Qt Forum

Qt => Общие вопросы => Тема начата: crocus от Ноябрь 29, 2006, 10:01



Название: Удаление из столбца TableWidget`a по списку
Отправлено: crocus от Ноябрь 29, 2006, 10:01
Привет Всем!
Этот код подразумевает удаление строк в TableWidget при условии если item содержит элемент списка, косяк в том что удаляется только одна строка, а надо все содержащие любой элемент списка.
Код:
.................
QStringList chlam;
chlam << "Барановский"
<< "Шмаковка"
<< "Тавричанка"
<< "Лесозаводск"
<< "Партизанск"
<< "Раздол"
<< "Зарубино"
<< "Ванино"
<< "Лозовый"
<< "Барабаш"
<< "Спасск"
<< "Новый"
<< "Таиланд"
<< "Таврич"
<< "Надежд";
int col_cleaner = listTable->currentColumn();
switch ( col_cleaner )
{
case 1:
foreach (QString str_chlam, chlam)
{
for ( int j = 0; j < listTable->rowCount(); ++j )
{
QString m_colcleaner = listTable->item(j, col_cleaner)->text();
if (m_colcleaner.contains(str_chlam))
listTable->removeRow(j);
}
}
break;
...............................


Название: Удаление из столбца TableWidget`a по списку
Отправлено: alexis от Ноябрь 29, 2006, 11:02
contains(str_chlam) == 0
проверяйте на равность нулю
а вообе в доку.
---
я бы сделал иначе
провел бы поиск методом  
QList<QTableWidgetItem *> findItems ( const QString & text, Qt::MatchFlags flags ) const


Название: Удаление из столбца TableWidget`a по списку
Отправлено: Dendy от Ноябрь 29, 2006, 11:06
Тебе цикльІ просто нужно один в другой вложить. Вначале пробегаться по всем строкам таблицьІ. Внутри по всем елементам списка, если нашёл совпадающий - удаляешь строку таблицьІ и break.


Название: Удаление из столбца TableWidget`a по списку
Отправлено: crocus от Ноябрь 29, 2006, 13:26
Не работает ни так, ни этак- все равно больше одного совпадения не ищет:
Код:
...........................
for ( int j = 0; j < listTable->rowCount(); ++j )
{
foreach (QString str_chlam, chlam)
{
QString m_colcleaner = listTable->item(j, col_cleaner)->text();
if (m_colcleaner.contains(str_chlam))
{
listTable->removeRow(j);
break;
}
}
}
......................


Название: Удаление из столбца TableWidget`a по списку
Отправлено: Dendy от Ноябрь 29, 2006, 13:58
Попробуй так:

Код:
for ( int j = 0; j < listTable->rowCount(); ++j )
    {
        foreach (QString str_chlam, chlam)
        {
            QString m_colcleaner = listTable->item(j, col_cleaner)->text();
            if (m_colcleaner.contains(str_chlam))
            {
                listTable->removeRow(j);
                j--;
                break;
            }
        }
    }


Название: Удаление из столбца TableWidget`a по списку
Отправлено: crocus от Ноябрь 29, 2006, 14:08
to Dendy:
   Огромное спасибо - все отлично заработало !!!


Название: Удаление из столбца TableWidget`a по списку
Отправлено: Вячеслав от Ноябрь 29, 2006, 19:13
Цитата: "crocus"
to Dendy:
   Огромное спасибо - все отлично заработало !!!

Хм ..... А всетаки - ЗАЧЕМ так извращаться если показали штатный метод ? ( alexis)

добавлено спустя 4 минуты:

 Тогда уж так:
Код:

for ( int j = 0; j < listTable->rowCount(); ++j )
    {
        QString m_colcleaner = listTable->item(j, col_cleaner)->text();
        foreach (QString str_chlam, chlam)
        {
            if (m_colcleaner.contains(str_chlam))
            {
                listTable->removeRow(j);
                j--;
                break;
            }
        }
    }


Ибо нефик для каждого элемента списка данные выдергивать ;)


Название: Удаление из столбца TableWidget`a по списку
Отправлено: crocus от Ноябрь 30, 2006, 03:13
Может я опять где-то чего-то упустил, но эта конструкция работает медленнее предыдущей и по виду более тяжеловесна:
Код:
......................................................
   int col_cleaner = listTable->currentColumn();
for ( int j = 0; j < listTable->rowCount(); ++j )
{
foreach (QString str_chlam, chlam)
{
QList<QTableWidgetItem *> finding = listTable->findItems( str_chlam, Qt::MatchContains);
QTableWidgetItem * item = listTable->item( j, col_cleaner );
foreach (item, finding)
{
int del_row = listTable->row(item);
listTable->removeRow(del_row);
}
}
}
.....................................