Похоже, вы думаете об этом задом наперед.Если объект X является тем, который хочет сделать «уведомление», то он должен излучать сигнал.Тогда у объектов Y будет слот для «приемников».
Таким образом, объект X должен излучать сигнал, например:
void X::statusChanged(TheStatus status);
Тогда объект Y будет иметь какой-то видсоответствующий слот.Предполагая надлежащие частные / публичные привилегии, любой объект - возможно, Z или даже сами X и Y - может использовать вызов QObject::connect
, чтобы связать воедино совпадающие сигналы и слоты экземпляров объекта.Вы даже можете привязывать сигналы к сигналам.
Хотя вполне возможно, что вы можете назвать этот слот в Y как-то вроде onStatusChanged
, что предполагает слишком тесную связь в вашем дизайне.В конце концов, слот может быть вызван как обычный метод.Так что, если вы можете думать о том, что слот на самом деле делает , а не называть его на основе его вызывающего, это может быть более разумным.
(Если функция foo()
вызывая другую функцию, мы склонны присвоить этому новому имени bar()
в зависимости от того, что он делает, вместо theFunctionCalledByFoo()
, верно?)
Предпочтительно, как указал Мартин, чтобы попытаться сохранитьтипы, которые используют слоты довольно простые и отправляют их по значению.Если вы отправляете указатели и ссылки, то вы начинаете беспокоиться о времени жизни объектов, особенно в многопоточных сценариях, когда сигналы / слоты обрабатываются в очереди.
Хороший пример класса на основе уведомлений, с которым можно поиграть, это очень просто.чтобы понять, может быть индикатор выполнения:
http://developer.qt.nokia.com/doc/qt-4.8/qprogressbar.html#details