![]() |
|
![]() ![]() ![]() |
|
Brodyaga |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Всем привет! Имеется два списка с разными моделями. При выделении элемента в одном списке должен выделятся определённый элемент из второго списка и наоборот.
Если в обоих списках добавить слот завязанный на сигнал currentChanged(const QModelIndex ¤t, const QModelIndex &previous) модели выделения противоположного списка(слот первого списка завязать на сигнал модели выделения второго списка и наоборот), то получается зацикливание, так как в слоте происходит выделение текущего индекса и следовательно новая эмуляция сигнала currentChanged.
Как быть? Это сообщение отредактировал(а) Brodyaga - 18.10.2010, 17:00 |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Попробуй так:
Это сообщение отредактировал(а) SABROG - 18.10.2010, 21:16 |
|||
|
||||
Brodyaga |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
SABROG, так получается всеровно один лишний вызов слота - От модели выделения первого списка сигнал идёт во второй список, затем от модели выделения второго списка сигнал идёт в первый список и там цепочка обрывается. А можно ли как то сделать чтобы цепочка обрывалась уже на втором списке и сигнал от него обратно в первый уже не шёл? К примеру, чтобы както вызывалось:
this->setCurrentIndex(model()->index(current.row(),current.column(),QModelIndex())); , но сигнал currentChanged не emit'ился? какнибудь его заблокировать можно? |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Можно попробовать вызывать блокировку эмитинга сигналов для конкретного объекта:
Только вот нет никакой уверенности, что внутри QItemSelectionModel не используются какие-нибудь внутренние служебные сигналы. |
|||
|
||||
Brodyaga |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Хм.. А может попровать обойти проблему с другой стороны... Пример с двумя списками я привёл для простоты. На самом деле у меня дерево(QTreeView) и список(QListView). В списке показываются дочерние элементы выбранного элемента в дереве, если они конечно есть, а если нет(в дереве выбран элемент без дочерних узлов) то показываются дочернии элементы, родителя, выбранного в дереве элемента(тоесть сам выбранный элемент в дереве тоже будет выбран и в списке и будет находится в списке вместе с элементами находящимися на одном уровне с ним в дереве).
Можно ли при таком раскладе использовать одну модель и для дерева и для списка? Можно ли както модифицировать список, чтобы он показывал дочернии узлы заданного объекта из модели? Если можно, то тогда проблема ушла бы сама собой, так как можно было бы спокойно задать одну модель выделения для списка и для дерева.. Это сообщение отредактировал(а) Brodyaga - 19.10.2010, 13:09 |
|||
|
||||
Brodyaga |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
SABROG, можно ли использовать одну модель и для дерева и для списка? Можно ли както модифицировать список, чтобы он показывал дочернии узлы заданного объекта из модели, а не только дочерние узлы верхнего элемента?
Это сообщение отредактировал(а) Brodyaga - 20.10.2010, 09:59 |
|||
|
||||
Brodyaga |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Кто-нибудь знает как разделить одну модель между двумя представлениями(дерево, список) ?
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |