Виктор Калесников
8 января 2022 г. 23:05

Как получить ссылку на обьект присылающий сигнал через сигнал/слот?

Есть несколько потоков с объектами Worker
Указатели на объекты хранятся в QVector workers в классе Core;
Один из воркеров присылает сигнал emit в родительский класс Core изначально создающий потоки.
Вопрос: как получить ссылку или указатель на конкретный обьект Worker в слоте Core принимаюшем этот сигнал?

Когда-то давно у меня была эта функция связанная с метаобьектми Qt. Не могу найти или вспомнить.

2

Вам это нравится? Поделитесь в социальных сетях!

6
Alexander
  • 8 января 2022 г. 23:08
  • Ответ был помечен как решение.

.sender()?

    Виктор Калесников
    • 8 января 2022 г. 23:09

    void Core::initThreads()
    {
    for (size_t i = 0; i < threadsCount; ++i)
    {
    QThread m_thread = new QThread();
    m_thread->setEventDispatcher(new QEventDispatcherEpoll);
    Worker
    m_worker = new Worker(address, port, i, this);

    1. connect(m_thread, &QThread::finished, m_worker, &QObject::deleteLater);
    2. connect(m_thread, &QThread::finished, m_thread, &QObject::deleteLater);
    3.  
    4. connect(m_worker, &Worker::login, this, &Core::onLogin);
    5.  
    6. m_worker->moveToThread(m_thread);
    7. threads.push_back(m_thread);
    8. workers.push_back(m_worker);
    9. m_thread->start();
    10. }
    11. qDebug() << "InitThreadsTotal: " << threadsCount;

    }

      Виктор Калесников
      • 8 января 2022 г. 23:13
      • (ред.)

      В классе Core логины от подключившихся воркеров будут хранится в QHash hashLogin;

      По итогу мне нужно получить в hashLogin пары логин и ссылка\указатель на конкретный обьект Worker приславший этот логин.

      слот

      void Core::onLogin(QString m_login)
      {
      hashLogin.insert(m_login, ???);
      }

        Виктор Калесников
        • 8 января 2022 г. 23:15

        Да, что то такое точно.

          Виктор Калесников
          • 8 января 2022 г. 23:17

          нашел в одном из своих проектов.
          PingClient *pClient = qobject_cast (sender());

          Похоже это то самое :)

            Виктор Калесников
            • 8 января 2022 г. 23:22
            • (ред.)

            Вот и ответ:
            Спасибо Александру за подсказку.

            void Core::onLogin(QString m_login)
            {
            Worker *m_worker = qobject_cast (sender());
            hashLogin.insert(m_login, m_worker);
            }

              Комментарии

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