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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Синхронная сортировка столбцов нескольких таблиц  (Прочитано 5315 раз)
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« : Сентябрь 24, 2012, 21:42 »

Здравствуйте!
помогите пожалуйста!

пытался связать два QTableWidget, так чтобы при изменении у одного
из них сортировки столбца, у другого, столбец с таким же индексом
получал такой же порядок сортировки

количество столбцов у таблиц одинаково

киньте пожалуйста минимальный рабочий пример такой реализации)
« Последнее редактирование: Ноябрь 11, 2012, 20:30 от gil9red » Записан

V1KT0P
Гость
« Ответ #1 : Сентябрь 24, 2012, 22:30 »

Я думаю тебе стоит посмотреть в сторону QTableView и QAbstractTableModel.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #2 : Сентябрь 24, 2012, 22:40 »

Не могу Улыбающийся
можно использовать только QTableWidget

кроме того, QTableWidget наследуется от QTableView, значит может использовать его
методы (не все), покрайней мере слот сортировки по столбцу взято у QTableView Улыбающийся
Записан

V1KT0P
Гость
« Ответ #3 : Сентябрь 24, 2012, 23:08 »

Не могу Улыбающийся
можно использовать только QTableWidget

кроме того, QTableWidget наследуется от QTableView, значит может использовать его
методы (не все), покрайней мере слот сортировки по столбцу взято у QTableView Улыбающийся
И как же ты собираешься для начала отловить событие сортировки столбцов? QTableWidget вообще-то предназначен для самых примитивных случаев.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #4 : Сентябрь 24, 2012, 23:24 »

Не могу Улыбающийся
можно использовать только QTableWidget

кроме того, QTableWidget наследуется от QTableView, значит может использовать его
методы (не все), покрайней мере слот сортировки по столбцу взято у QTableView Улыбающийся
И как же ты собираешься для начала отловить событие сортировки столбцов? QTableWidget вообще-то предназначен для самых примитивных случаев.

Можно использовать сигнал, идущий от горизонтального заголовка таблицы, когда
на нее щелкают мышкой

Я делал так: создавал наследника от QTableWidget, перегружал метод сортировки как слот, что то типо такого:
Код:
void UTable::sortItems(int column, Qt::SortOrder order)
{
    horizontalHeader()->setSortIndicator(column, order);
    sortByColumn(column);
}
потом механизмов слотов/сигналов соединял две таблицы в плане общей сортировки:
Код:
    connect(table1->horizontalHeader(), SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)),
            table1, SLOT(sortItems(int,Qt::SortOrder)));
    connect(table1->horizontalHeader(), SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)),
            table2, SLOT(sortItems(int,Qt::SortOrder)));

    connect(table2->horizontalHeader(), SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)),
            table2, SLOT(sortItems(int,Qt::SortOrder)));
    connect(table2->horizontalHeader(), SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)),
            table1, SLOT(sortItems(int,Qt::SortOrder)));

ну а потом, у меня падала программа, и отладчик единственное что показывал это окно дизассенблера, но проблема именно в sortItems() который в наследнике

Вот я и обратился сюда, чтобы скинули свой рабочий пример, и я в нем бы разобрался
Записан

V1KT0P
Гость
« Ответ #5 : Сентябрь 24, 2012, 23:41 »

ну а потом, у меня падала программа, и отладчик единственное что показывал это окно дизассенблера, но проблема именно в sortItems() который в наследнике

Вот я и обратился сюда, чтобы скинули свой рабочий пример, и я в нем бы разобрался
Ну смотри что получается после соединения сигналами:
В 1 таблице нажимаешь на заголовок, срабатывает слот который изменяет порядок сортировки и вызывает сортировку во 2-й таблице которая тоже вызывает слот сортировки которая меняет заголовок и вызывает слот сортировки 1-й таблицы которая вызывает смену заголовка сигнал который вызывает слот сортировки 2-й таблицы которая вызывает изменение заголовка сигнал которой вызывает слот сортировки 1-й таблицы... Думаю мысль насчет рекурсии ясна? =)
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #6 : Сентябрь 24, 2012, 23:52 »

Понятно, посмотрел исходники, сигнал заголовка sortIndicatorChanged(int,Qt::SortOrder) генерируется при вызове setSortIndicator(int logicalIndex, Qt::SortOrder order), а этот метод является частью методов сортировки, моя ошибка Улыбающийся
Записан

gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #7 : Сентябрь 25, 2012, 00:15 »

И как тогда быть? Улыбающийся каким способом реализовать это?
Записан

V1KT0P
Гость
« Ответ #8 : Сентябрь 25, 2012, 00:22 »

И как тогда быть? Улыбающийся каким способом реализовать это?
Добавь ссылки друг на друга и меняй напрямую, только опять же учти чтоб не было рекурсии. Либо добавляй отдельную функцию которая не вызывает изменение у другой таблицы. Либо добавь переменную блокировки вызова функции другой таблицы, тогда устанавливаешь ее в true, вызываешь функцию а когда она отработает false.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #9 : Сентябрь 26, 2012, 00:07 »

Понятно Улыбающийся
что нибудь придумаю Улыбающийся
спасибо, V1KT0P Улыбающийся
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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