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

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

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

Сообщений: 498



Просмотр профиля
« : Ноябрь 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

Сообщений: 750


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

можно через invokeMethod
Записан
deMax
Бывалый
*****
Offline Offline

Сообщений: 498



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

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

Сообщений: 750


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

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

QTimer::singleShot(0, theObject, [param](){ theObject->method(param); });
Записан
deMax
Бывалый
*****
Offline Offline

Сообщений: 498



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

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

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

Сообщений: 750


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

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

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

Сообщений: 498



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

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

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