Алексей Внуков3 ноября 2020 г. 8:03

Signal/Slot к динамически созданным обьектам

signals, slots, qt

Доброго времени суток. Собственно есть класс, его объекты создаются динамически по разным условиям. после создания объекта (в конструтор принимает 2 параметра - строка и индекс объекта) класса возвращается его индекс в системе, а сам объект помещается в отдельный поток. Колличестов объектов не ограничено. Вопрос как прописать конект чтоб вызывался именно нужный объект класса а не все вместе. Создание происходит так:

int threadIdx = m_availableThreads.size();
Foo *foo=new foo(string,threadIdx);
QThread *thr=new QThread(this);
m_availableThreads.insert(threadIdx,thr); //мап указателей на потоки
foo->moveToThread(m_availableThreads.value(threadIdx));
m_threads.append(threadIdx);//вектор индексов объектов
map_active.insert(threadIdx,foo);//мап указателей на объекты
m_availableThreads.last()->start();

пробовал биндить конекты через лямду но безрезультатно:

connect(this,&Core::some_sig,[=](int idx){
        std::bind(&Foo::some_slot, map_active.value(idx));
 });

можно конечно через лямду сразу вызвать нужный слот:

connect(this,&Core::some_sig,[=](int idx){
        map_active.value(idx)->some_slot();
 });

но будет предупреждение что вызов происходит не в том потоке.
кто как решал подобные ситуации? (ну кроме варианта отправлять сигнал с индексом всем, а обрабатывает тот у кого индекс совпадает)

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
3

Добрый день.
Поздновато, конечно, но раньше не мог посмотреть, слишком много текущих задач имею, еле успеваю.

В Qt для вызова методов в других потоках можно использовать invokeMethod , по идее это будет потокобезопасным, а также должно решить проблему с варнингами, но я до конца не уверен.

добрый, как говорится - лучше поздно чем никогда. за ссылку благодарствую, как немного освобожусь - попробую, о результатах непременно отпишусь.

проверил, работает отлично

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Timeweb

Позвольте мне порекомендовать вам отличный хостинг, на котором расположен EVILEG.

В течение многих лет Timeweb доказывает свою стабильность.

Для проектов на Django рекомендую VDS хостинг

Посмотреть Хостинг
C

C++ - Тест 005. Структуры и Классы

  • Результат:75баллов,
  • Очки рейтинга2
АЕ

C++ - Тест 005. Структуры и Классы

  • Результат:25баллов,
  • Очки рейтинга-10
m

C++ - Тест 003. Условия и циклы

  • Результат:28баллов,
  • Очки рейтинга-10
Последние комментарии
AB

Qt/C++ - Урок 008. QDataWidgetMapper - Работа с базой данных через виджет

Понял сам так - происходит через setTable() "Sets the database table on which the model operates to tableName. Does not select data from the table, but fetches its field information", а затем че…
AB

Qt/C++ - Урок 008. QDataWidgetMapper - Работа с базой данных через виджет

Начал делать что-то похожее, но без sql. Не очень понимаю, что делает mapper->setCurrentModelIndex(model->index(row,0)); Вернее не понимаю вот что: откуда он берёт данные, кот…
ИВ

Qt/C++ - Урок 048. QThread - работа с потоками с помощью moveToThread

Не получается сделать connect, получаю гору ошибок. В чем может быть дело ?
ИВ

Qt/C++ - Урок 034. Echo Server на основе QTcpServer

Добрый день, разрешите вопрос: во всех примерах работы с QTcpServer его всегда создают в main.cpp, нет ли возможности корректно сохдать его в MainWindow.cpp ? Просто если перенести код…
D

Django - Урок 001. Развёртывание сайта на Django + PostgreSQL + Gunicorn + Nginx

А почему нельзя? Где можно об этом почитать? Киньте, пожалуйста, в меня ссылкой.
Сейчас обсуждают на форуме

Отправка картинки в DRF

Да я знаю ;-) используйте, пожалуйста, в следующий раз средства сайта. В данном случае сторонний сервис ни к месту.
  • BlinCT
  • 9 апреля 2021 г. 8:15

Работа с созданным обьектом qml через Qt.createComponent

Добрый день. И как это решает мою проблему?) Item{ id: root property var model property bool headers : false property string objectName property int iMaxWidthRow:…

Проект на cmake и QCharts

Кто-нибудь сталкивался с проблемой скроллинша чарта ? если допустим увеличить в ширину сам чарт, как скроолить весь чарт а не только его видимую часть ?

Ожидание ввода QLineEdit

Попробовал, крешится напрочь... Такое чуство что таймер не удаляется.... и к нему снова идет обращение....

QScrollArea dynamically add QCheckBoxes

Всё правильно. Это просто спамер, который отправился в вечный бан.
О нас
Услуги
© EVILEG 2015-2020
Рекомендует хостинг TIMEWEB