Допустим, мы имеем follogin UI:сигналы и слоты в многослойных виджетов UI
+--------------------------+
|W1 +--------------+ |
| |W2 | |
| | +----------+ | |
| | |W3 | | |
| | +----------+ | |
| | | |
| +--------------+ |
+--------------------------+
W3 заинтересован в определенном сигнале emited в W1 (или уровня ниже, т.е. qApp).
Идея заключается в разработке W3 независимо. Но кто-то должен выполнить соединение с сигналом/слотом.
Что было бы хорошей практикой/рекомендуемым способом подключения сигнала, излучаемого в W1, в слот в W3, если мы хотим, чтобы W3 не знал о каком-либо другом виджетах, и мы не хотим, чтобы W1 знал о W3?
Решение 1: Подключите сигнал в W1 с сигналом в W2 (сигнал к сигнальной технике) и, следовательно, подключите сигнал в W2 к разъему в W3.
Решение 2: Генерировать сигнал qApp и подключать его в W2 со слотом в W3.
Решение 3: Создайте сигнал qApp и подключите к нему W3, используя собственный слот.
Благодаря
Спасибо за ваш ответ. Я думаю, что имеет смысл просто инкапсулировать то, что нужно W3 в W2. W2 просто нужно выставить слот, и тот, кто подключает их, будет отвечать за этот слот, который будет вызван. После этого W2 будет использовать эту информацию для W3. *** qApp - это макрос, который поставляется с Qt для доступа к объекту QApplication и доступен из любого места в коде, который имеет в нем свои корни.Сигналы, испущенные в экземпляре QApplication, можно связать, выполнив: connect (qApp, SIGNAL (someCustomSignal()), это, SLOT (someSlot())); – Daniel
Да, тогда я правильно понял вашу идею qApp. (и мой критический аргумент против него применяется;)). Лично я избегаю использования QApplication в виджетах, насколько это возможно. Предполагая, что некоторый подкласс QApplication с пользовательскими сигналами/слотами связывает его еще больше. Обычно я вообще не подклассифицирую QApplication. Я предпочитаю, чтобы некоторые виджеты знали друг о друге, а не связывали их неявно и хорошо скрывали через всемогущий объект QApplication. –