Виктор Калесников
08 січня 2022 р. 23:05

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

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

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

2

Вам це подобається? Поділіться в соціальних мережах!

6
Alexander
  • 08 січня 2022 р. 23:08
  • Відповідь була позначена як рішення.

.sender()?

    Виктор Калесников
    • 08 січня 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);

        connect(m_thread, &QThread::finished, m_worker, &QObject::deleteLater);
        connect(m_thread, &QThread::finished, m_thread, &QObject::deleteLater);
    
        connect(m_worker, &Worker::login, this, &Core::onLogin);
    
        m_worker->moveToThread(m_thread);
        threads.push_back(m_thread);
        workers.push_back(m_worker);
        m_thread->start();
    }
    qDebug() << "InitThreadsTotal: " << threadsCount;
    

    }

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

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

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

      слот

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

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

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

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

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

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

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

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

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

              Коментарі

              Only authorized users can post comments.
              Please, Log in or Sign up
              • Останні коментарі
              • Evgenii Legotckoi
                16 квітня 2025 р. 17:08
                Благодарю за отзыв. И вам желаю всяческих успехов!
              • IscanderChe
                12 квітня 2025 р. 17:12
                Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
              • AK
                01 квітня 2025 р. 11:41
                Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
              • Evgenii Legotckoi
                09 березня 2025 р. 21:02
                К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
              • VP
                09 березня 2025 р. 16:14
                Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…