Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Доставка сигналов к QMainWindow
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
phpCoder
Добрый день.
Есть главное окно QMainWindow. В нем создаются какие-то виджеты. В каждом таком виджете создаются объекты некоторых классов. В этих объектах в свою очередь делаюься езе объекты и т.д.
Каждый такой вот объект выполняет некоторую работу, и после выполнения отчитывается о ней (хочет послать сообщение типа "Готово!" или "Неудача..."). Данное сообщения я хочу доставить до QMainWindow и вставить в статусбар.
Вопрос: как это сделать, если мои объекты лежат глубоко в иерархии и непосредственно с QMainWindow общаться не могут. Может нужно как-то правильно сигналы расставить?
lanz
В порядке возрастания:

1. Можно сделать QMainWindow слот setStatus(QString) например и к нему подсоединится, однако это практически эквивалентно хранению указателя на QMainWindow(в общем то ничего плохого, но у вас сказано, что
Цитата
объекты лежат глубоко в иерархии

)

2. В таком случае можно создать объект с интерфейсом например postStatus и этот объект будет общатся с QMainWindow, а виджеты с ним.
3. Можно сделать свой фильтр событий на QCoreApplication, и посылать специальные события на адрес QCoreApplication::instance()
4. Можно использовать DBUS/COM
Litkevich Yuriy
п.3 наиболее простой в данной ситуации, на мой вкус.
phpCoder
Цитата(lanz @ 31.12.2014, 17:32) *
1. Можно сделать QMainWindow слот setStatus(QString) например и к нему подсоединится, однако это практически эквивалентно хранению указателя на QMainWindow(в общем то ничего плохого, но у вас сказано, что
Да, таскать всюду указатель не удобно.
Цитата(lanz @ 31.12.2014, 17:32) *
В таком случае можно создать объект с интерфейсом например postStatus и этот объект будет общатся с QMainWindow, а виджеты с ним.
Не совсем понял, что это и как это выглядит. Можно пример?


Цитата(lanz @ 31.12.2014, 17:32) *
3. Можно сделать свой фильтр событий на QCoreApplication, и посылать специальные события на адрес QCoreApplication::instance()
С этим никогда не сталкивался. Тоже, можно пример?
lanz
Цитата
Да, таскать всюду указатель не удобно.

Не надо таскать, передайте один например в конструктор виджета.
Либо в конструкторе пройдитесь по родителям и найдите нужный и сохраните его в поле.
Цитата
Не совсем понял, что это и как это выглядит. Можно пример?

Можно, только этот объект придется тоже как то передавать.
Можно конечно и синглтон сделать.
Цитата
С этим никогда не сталкивался. Тоже, можно пример?

http://qt-project.org/doc/qt-4.8/eventsandfilters.html
Litkevich Yuriy
Цитата(lanz @ 3.1.2015, 0:21) *
По-русски
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.