Название: Передача аргументов для connect
Отправлено: Igors от Февраль 04, 2016, 07:11
Добрый день C++ (Qt) class MyContainer : public QObject { ... QVector <MyObject *> mData; }; .. MyContainer cont; MyReceiver * receiver; .. for (int i = 0; i < cont.mData.size(); ++i) QObject::connect(cont.mData[i], &MyObject::SomeSignal, receiver, &MyReceiver::SomeSlot);
Все работает, но как спрятать кишки, чтобы можно было написать напр так C++ (Qt) cont.ConnectAll(receiver, &MyReceiver::SomeSlot); // а внутри метода уже цикл
Название: Re: Передача аргументов для connect
Отправлено: poru от Февраль 04, 2016, 10:18
C++ (Qt) template <typename Func> void connectAll(const typename QtPrivate::FunctionPointer<Func>::Object *receiver, Func slot) { for (int i = 0; i < mData.size(); ++i) connect(mData[i], &MyObject::Signal, receiver, slot); }
Название: Re: Передача аргументов для connect
Отправлено: Igors от Февраль 04, 2016, 13:51
C++ (Qt) template <typename Func> void connectAll(const typename QtPrivate::FunctionPointer<Func>::Object *receiver, Func slot) { for (int i = 0; i < mData.size(); ++i) connect(mData[i], &MyObject::Signal, receiver, slot); }
До такого не додумался, но проконало и более простое C++ (Qt) template <class TObj, class TMethod> void connectAll(TObject *receiver, TMethod method) { for (int i = 0; i < mData.size(); ++i) connect(mData[i], &MyObject::Signal, receiver, method); }
Спасибо
|