Russian Qt Forum

Qt => Вопросы новичков => Тема начата: deMax от Ноябрь 03, 2017, 12:16



Название: [решено] вызвать сигнал только для того кто просил данные
Отправлено: deMax от Ноябрь 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 отсеивать?


Название: Re: вызвать сигнал только для того кто просил данные
Отправлено: qate от Ноябрь 03, 2017, 15:31
можно через invokeMethod


Название: Re: вызвать сигнал только для того кто просил данные
Отправлено: deMax от Ноябрь 07, 2017, 08:40
можно через invokeMethod
он текстовое имя слота просит, а хотелось бы указатель на слот передавать, как в connect.


Название: Re: вызвать сигнал только для того кто просил данные
Отправлено: qate от Ноябрь 07, 2017, 13:35
можно через invokeMethod
он текстовое имя слота просит, а хотелось бы указатель на слот передавать, как в connect.

QTimer::singleShot(0, theObject, [param](){ theObject->method(param); });


Название: Re: вызвать сигнал только для того кто просил данные
Отправлено: deMax от Ноябрь 07, 2017, 14:06
В смысле, лямду использовать? Мне слот в другом потоке вызвать надо.

У меня счас N потоков работающих с БД, сигнал-слот получить-отправить и все запущенны, в классе БД(основной поток) соединяюсь со всеми сигналами-слотами в потоках. Сигнал на выполнение sql уходит всем потокам, внутри потока фильтр ( if(numThread != this->numThread) return; ). Оно работает, но сигналы лишний раз вызываются.


Название: Re: вызвать сигнал только для того кто просил данные
Отправлено: qate от Ноябрь 07, 2017, 14:44
В смысле, лямду использовать? Мне слот в другом потоке вызвать надо.

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


Название: Re: вызвать сигнал только для того кто просил данные
Отправлено: deMax от Ноябрь 08, 2017, 08:40
Спасибо