Russian Qt Forum
Ноябрь 24, 2024, 05:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Передача аргументов для connect  (Прочитано 2526 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Февраль 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);  // а внутри метода уже цикл
 
Записан
poru
Самовар
**
Offline Offline

Сообщений: 103


Просмотр профиля
« Ответ #1 : Февраль 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);
   }
 
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Февраль 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);
   }
 
Спасибо
« Последнее редактирование: Февраль 04, 2016, 13:53 от Igors » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.21 секунд. Запросов: 23.