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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QTablewidget выборочная сортировка (Решено)  (Прочитано 9272 раз)
CJ1
Гость
« : Июль 24, 2012, 11:58 »

Помогите пожалуйста сделать выборочную сортировку в QTableWidget.

Пользователь выделяет нужные строки, и они должны сортироваться по имени
« Последнее редактирование: Июль 31, 2012, 08:25 от CJ1 » Записан
ruzik
Гость
« Ответ #1 : Июль 24, 2012, 17:48 »

Ну, можно, например использовать это:
Код:
QList<QTableWidgetItem *> list = tableWidget->selectedItems (); //получаем выделенные ячейки
QList<QTableWidgetItem *> oldList = list;
qSort(list); //сортируем
for (int a=0; a < list.count(); a++)
     *oldList[a] = *list[a];
P.S. легко мог что либо напутать, сам код не проверял, но вроде бы все должно работать, извините если на практике получиться иначе))
Записан
CJ1
Гость
« Ответ #2 : Июль 30, 2012, 12:09 »

Спасибо! Но сортирует криво вообще как то!
Записан
CJ1
Гость
« Ответ #3 : Июль 30, 2012, 12:46 »

Ну помогите пожалуйсто Плачущий
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Июль 30, 2012, 12:58 »

Ну как сказал ruzik только надо qSort(lst.begin(), lst.end(), myLessThen) т.к. qSort(lst) будет сортировать по адресам а не по именам
Записан
CJ1
Гость
« Ответ #5 : Июль 30, 2012, 13:05 »

А что такое myLessThen Непонимающий
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Июль 30, 2012, 13:12 »

А что такое myLessThen Непонимающий
В Ассистенте откройте страницу qSort и поищите LessThan - увидите примерчик.
Записан
CJ1
Гость
« Ответ #7 : Июль 30, 2012, 13:17 »

ОК, извиняюсь за тупость, просто я уже двое суток не сплю ))))
Записан
CJ1
Гость
« Ответ #8 : Июль 30, 2012, 13:31 »

 Плачущий Плачущий Плачущий Плачущий не выходит... говорит кучу ошибок
Записан
CJ1
Гость
« Ответ #9 : Июль 30, 2012, 13:34 »

Теперь вот так сделал!
Код:
bool caseInsensitiveLessThan(const QTableWidgetItem *s1, const QTableWidgetItem *s2)
{
    return s1->text().toLower() < s2->text().toLower();
}



void MainWindow::on_pushButton_4_clicked()
{
    QList<QTableWidgetItem *> list = ui->tableWidget_2->selectedItems (); //получаем выделенные ячейки
     QList<QTableWidgetItem *> oldList  = list;



    qSort(list.begin(), list.end(),caseInsensitiveLessThan); //сортируем
    for (int a=0; a < list.count(); a++){
         *oldList[a] = *list[a];

    }
    ui->tableWidget_2->reset();
}

И всеравно косяки
Записан
CJ1
Гость
« Ответ #10 : Июль 30, 2012, 13:35 »

А еще сортируются не по строкам а только те которые выделенны
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Июль 30, 2012, 13:47 »

А еще сортируются не по строкам а только те которые выделенны
Непонимающий Так как же надо? Вы писали
Пользователь выделяет нужные строки, и они должны сортироваться по имени
Ну значит не выделенные не трогаются. Или как  Непонимающий

В текущей реализации ошибку я вижу
Код:
for (int a=0; a < list.count(); a++){
         *oldList[a] = *list[a];
   
Так мы затираем элемент который может понадобиться позже. А вот как исправить - надо подумать. Ожидайте  Улыбающийся
Записан
CJ1
Гость
« Ответ #12 : Июль 30, 2012, 13:57 »

Нужно так, просто выделяем несколько строк, и при нажатии на кнопки, строки сортируются по имени!

Я щас вообще думать не могу  Плачущий Плачущий
Но нужно срочно!
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #13 : Июль 30, 2012, 15:26 »

Я щас вообще думать не могу  Плачущий Плачущий
Но нужно срочно!
Ну ладно, попробую помочь-спасти Пятачка Улыбающийся

Код
C++ (Qt)
bool CompareRows( const QTableWidgetItem * item0, const QTableWidgetItem * item1 )
{
return item0->row() < item1->row();
}
 
bool CompareNames( const QTableWidgetItem & item0, const QTableWidgetItem & item1 )
{
return item0.text().toLower() < item1.text().toLower();
}
 
void MainWindow::on_pushButton_4_clicked()
{
       QList<QTableWidgetItem *> list = ui->tableWidget_2->selectedItems ();
qSort(lst.begin(), lst.end(), CompareRows);
 
QList <QTableWidgetItem> tmp;
for (int i = 0; i < lst.size(); ++i)
tmp.push_back(*lst[i]);
qSort(tmp.begin(), tmp.end(), CompareNames);
 
for (int i = 0; i < lst.size(); ++i)
*lst[i] = tmp[i];
 
       ui->tableWidget_2->reset();
}
 
Записан
CJ1
Гость
« Ответ #14 : Июль 30, 2012, 15:49 »

Блиииин! Не то! Так строки не сортируются, они только как попало местами меняются! Плачущий
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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