Если вам просто нужно подключиться к сигналам, поступающим от объектов Qt, хакерское решение заключается в использовании существующих объектов QT, имеющих открытые или защищенные виртуальные слоты, которые соответствуют сигнатуре сигнала, к которому вы хотите подключиться.Вы можете создать подкласс QT-объекта и повторно реализовать виртуальный слот в качестве прокси-сервера, чтобы выполнить любое действие, которое вам нужно, когда излучается сигнал QT.Например,
class SignalProxy : public QWidget
{
public:
SignalProxy() {}
void setVisible( bool isVisible )
{
// Do whatever you want to do when the signal is emitted.
}
};
// code to connect the signal, e.g., to a QWebView object
SignalProxy proxy;
QWebView webview;
QObject::connect( &webview, SIGNAL(loadFinished(bool)),
&proxy, SLOT(setVisible(bool)) );
Это не красиво, но оно выполняет свою работу.Если бы вы действительно намеревались обойтись без MOC, вы, вероятно, могли бы найти существующие объекты Qt для использования в качестве прокси практически для любой необходимой сигнатуры сигнала, например, классы QAbstract ... имеют много виртуальных слотов, и вы можете скрыть все это.злобность в библиотеке, которая обеспечивает сигналы повышения или API стиля tr1 :: function <> для подключения к сигналам QT.
Вызов слотов на объектах QT менее важен, чем прием сигналов, так как обычно вы можете вызыватьметод слота напрямую.