Перегружаешь у 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);
}
Ну и не стоит говорить что такая сортировка "непростая"
