QTableWidget setSortingEnabled для определенного столбца Qt

У меня есть виджет таблицы, содержащий 2 столбца. Первый столбец содержит метки времени, а второй столбец содержит сообщение, соответствующее метке времени. Я хочу, чтобы пользователь мог щелкнуть заголовок столбца с меткой времени и изменить порядок. Я также хочу, чтобы пользователь мог щелкнуть заголовок сообщения и расположить все сообщения в алфавитном порядке. Использование setSortingEnabled отлично работает для заголовка сообщения, но из-за формата метки времени это не приведет к правильной сортировке меток времени. Есть ли способ установитьSortingEnabled () только для столбца сообщений, и когда пользователь щелкает заголовок временной метки, он вызывает настраиваемую функцию для сортировки?


person user2494298    schedule 10.02.2015    source источник
comment
Проверьте ответ здесь: stackoverflow.com/questions / 7848683 / Вы можете создать подкласс QTableWidgetItem и реализовать оператор ‹. Надеюсь, поможет.   -  person dfranca    schedule 10.02.2015


Ответы (1)


SetSortingEnabled () влияет на все столбцы. Вы можете установитьSortingEnable (False), создать функцию с настраиваемой сортировкой для столбца timestamp и стандартной сортировкой для других столбцов и подключить к этой функции сигнал sectionClicked () HorizterHeaders. Я пробовал в pyqt5, он работает, но много работы по распознаванию фактического sortOrder, установке и удалению headerIcons и т. Д.

Гораздо более простой способ - установить соответствующий формат для метки времени, выровненный по правому краю, фиксированной длины, слева, заполненный '0', в python3, например:

ts = '{:0>15}'.format(timestamp)

слева, заполненный пробелами, тоже работает:

ts = '{: >15}'.format(timestamp)  
person a_manthey_67    schedule 24.02.2015