Qt use case для одного и того же сигнала на 2 слота на одном и том же объекте? - PullRequest
5 голосов
/ 08 января 2010

Я новичок в Qt. Когда я читал документацию , я столкнулся с этой конфигурацией:

connect( Object1, Signal1, Object2, slot1 )
connect( Object1, Signal1, Object2, slot2 )

Что может быть полезным для этого?

Выглядит странно, если исходить из фона Erlang / Python. Наверное, это связано с поворотами наследования в C ++.

Ответы [ 3 ]

4 голосов
/ 08 января 2010

Это для случаев, когда у вас есть что-то вроде одной кнопки, которая меняет две части другой. Это может звучать глупо, но это будет эквивалентно вызову функции второго слота из первого слота.

Скажем, нажатие кнопки воспроизведения / паузы делает кнопку остановки активной или активной, а также меняет подсказку. Это может быть легко сделано с одним слотом, но вы можете захотеть сделать это независимо друг от друга в другое время. Чтобы способствовать повторному использованию, вы используете вышеуказанный метод подключения одного сигнала к 2 слотам.

3 голосов
/ 08 января 2010

Это позволило бы другим объектам запускать slot1 и slot2 отдельно.

connect( Object1, Signal1, Object2, slot1 );
connect( Object1, Signal1, Object2, slot2 );
connect( Object3, Signal1, Object2, slot1 );
connect( Object4, Signal1, Object2, slot2 );
0 голосов
/ 13 января 2010

На самом деле это действительно мощный способ создания MVC ... Допустим, вы хотите «соединить» представления для прослушивания объекта, а не передачи данных ...

Вы можете подключить представление PieChart с помощью:

connect( MySourceModel, SIGNAL(newDataAreThere()), PieChartView, SLOT(notifyNewDataReceived()));

Позже в вашем приложении создается другой модуль, который также требует прослушивания данных ... Нет проблем:

connect( MySourceModel, SIGNAL(newDataAreThere()), AnotherView, SLOT(notifyNewDataReceived()));

Вы можете подключать / отключать ваши взгляды, и модель даже не знает, кто его слушает ... Это не его проблема ...

Надеюсь, мой маленький пример понятен;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...