Russian Qt Forum

Qt => Общие вопросы => Тема начата: Igors от Февраль 04, 2016, 07:11



Название: Передача аргументов для 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);
   }
 
Спасибо