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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Непростая сортировка QTableWidget  (Прочитано 11417 раз)
CJ1
Гость
« Ответ #15 : Июня 09, 2012, 14:35 »

Понятно! Правда всеравно читстая фигня получается
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #16 : Июня 09, 2012, 14:38 »

Понятно! Правда всеравно читстая фигня получается
Твоя "читстая фигня" нам здесь не видна. Уж потрудись разъяснить. Или на форуме в первый раз  Непонимающий
Записан

Qt 5.11/4.8.7 (X11/Win)
CJ1
Гость
« Ответ #17 : Июня 09, 2012, 14:39 »

Вобщем сортируется не так!!! А как попало! Хотя проходит через этот переопределенный метод!

И еще мне не ясно что передается в параметре other??
Записан
CJ1
Гость
« Ответ #18 : Июня 09, 2012, 14:44 »

Аааа, все, красавчик, почитал доку, понял! Теперь все сделал верно! Спасибо всем за проявленное терпения!  Улыбающийся
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #19 : Июня 09, 2012, 14:45 »

Аааа, все, красавчик, почитал доку, понял! Теперь все сделал верно! Спасибо всем за проявленное терпения!  Улыбающийся
Непонимающий
Записан

Qt 5.11/4.8.7 (X11/Win)
CJ1
Гость
« Ответ #20 : Июня 09, 2012, 14:50 »

Да, просто говорю, что все сделал и понял как делается
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #21 : Июня 09, 2012, 14:57 »

Перегружаешь у QTableWidgetItem operator<
Код
C++ (Qt)
bool YourTableWidgetItem::operator< ( const QTableWidgetItem & other ) const
{
   if( this->column() == 0 && other.column() == 0 )
   {
      if( this->text().contains( "Казахстан" ) )
        return true;
      if( other.text().contains( "Казахстан" ) )
        return false;
      if( this->text().contains( "Россия" ) )
        return true;
      if( other.text().contains( "Россия" ) )
        return false;
   }
   return this->QTableWidgetItem::operator<( other );
}
 
Я никогда не использовал таблицы (не нужно), но это "нетранзитивно" и сортировка использующая такой оператор имеет право рухнуть (что она и делает на некоторых платформах). Лучше так
Код
C++ (Qt)
enum {
pri_Kazah,
pri_Russia,
pri_Default,
};
 
inline int GetPriority( const QTableWidgetItem & itm )
{
  if (itm.text().contains("Казахстан"))  return pri_Kazah;
  if (itm.text().contains("Россия"))  return pri_Russia;
  return pri_Default;
}
 
bool YourTableWidgetItem::operator< ( const QTableWidgetItem & other ) const
{
int pr1 = GetPriority(*this);
int pr2 = GetPriority(other);
if (pr1 < pr2) return false;
if (pr1 > pr2) return true;
if (pr1 < pri_Default) return false;  // равны не значит <, нужно вернуть false
return QTableWidgetItem::operator< (other);
}
 

Ну и не стоит говорить что такая сортировка "непростая"  Улыбающийся
Записан
CJ1
Гость
« Ответ #22 : Июня 09, 2012, 15:01 »

Буду пробовать оба способа
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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