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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Удаление из столбца TableWidget`a по списку  (Прочитано 3988 раз)
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;
...............................
Записан
alexis
Гость
« Ответ #1 : Ноябрь 29, 2006, 11:02 »

contains(str_chlam) == 0
проверяйте на равность нулю
а вообе в доку.
---
я бы сделал иначе
провел бы поиск методом  
QList<QTableWidgetItem *> findItems ( const QString & text, Qt::MatchFlags flags ) const
Записан
Dendy
Гость
« Ответ #2 : Ноябрь 29, 2006, 11:06 »

Тебе цикльІ просто нужно один в другой вложить. Вначале пробегаться по всем строкам таблицьІ. Внутри по всем елементам списка, если нашёл совпадающий - удаляешь строку таблицьІ и break.
Записан
crocus
Гость
« Ответ #3 : Ноябрь 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;
}
}
}
......................
Записан
Dendy
Гость
« Ответ #4 : Ноябрь 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;
            }
        }
    }
Записан
crocus
Гость
« Ответ #5 : Ноябрь 29, 2006, 14:08 »

to Dendy:
   Огромное спасибо - все отлично заработало !!!
Записан
Вячеслав
Гость
« Ответ #6 : Ноябрь 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;
            }
        }
    }


Ибо нефик для каждого элемента списка данные выдергивать Подмигивающий
Записан
crocus
Гость
« Ответ #7 : Ноябрь 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);
}
}
}
.....................................
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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