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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [решено] вызвать сигнал только для того кто просил данные  (Прочитано 4220 раз)
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« : Ноябрь 03, 2017, 12:16 »

Хочу создать интерфейс классу для работы с БД:
Код:
class BD{
public slots: int sendQuery(QString query, QString dbName);
signals: void sendResult(Status, QList<QVariantList> data); }
к этому классу подключаются разные модули, для получения данных.

sendQuery возвращает id запроса, чтоб понять что спрашивали.
хотелось бы чтобы sendResult посылал автоматически тому кто спрашивал данные. Или лучше сделать sendResultModule1, sendResultModule2.. или отсылать всем и по id отсеивать?
« Последнее редактирование: Ноябрь 08, 2017, 08:41 от deMax » Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #1 : Ноябрь 03, 2017, 15:31 »

можно через invokeMethod
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #2 : Ноябрь 07, 2017, 08:40 »

можно через invokeMethod
он текстовое имя слота просит, а хотелось бы указатель на слот передавать, как в connect.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #3 : Ноябрь 07, 2017, 13:35 »

можно через invokeMethod
он текстовое имя слота просит, а хотелось бы указатель на слот передавать, как в connect.

QTimer::singleShot(0, theObject, [param](){ theObject->method(param); });
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #4 : Ноябрь 07, 2017, 14:06 »

В смысле, лямду использовать? Мне слот в другом потоке вызвать надо.

У меня счас N потоков работающих с БД, сигнал-слот получить-отправить и все запущенны, в классе БД(основной поток) соединяюсь со всеми сигналами-слотами в потоках. Сигнал на выполнение sql уходит всем потокам, внутри потока фильтр ( if(numThread != this->numThread) return; ). Оно работает, но сигналы лишний раз вызываются.
« Последнее редактирование: Ноябрь 07, 2017, 14:11 от deMax » Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #5 : Ноябрь 07, 2017, 14:44 »

В смысле, лямду использовать? Мне слот в другом потоке вызвать надо.

а оно и будет в другом, см. реализацию QTimer::singleShot для случая msec == 0 - там вызов invokeMethod )
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #6 : Ноябрь 08, 2017, 08:40 »

Спасибо
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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