Russian Qt Forum
Марта 11, 2025, 08:04 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [решено] вызвать сигнал только для того кто просил данные  (Прочитано 4335 раз)
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.155 секунд. Запросов: 22.