Виктор Калесников
Қаң. 8, 2022, 11:05 Т.Қ.

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

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

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

2

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

6
Alexander
  • Қаң. 8, 2022, 11:08 Т.Қ.
  • Жауап шешім ретінде белгіленді.

.sender()?

    Виктор Калесников
    • Қаң. 8, 2022, 11: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, 11:13 Т.Қ.
      • (өңделген)

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

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

      слот

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

        Виктор Калесников
        • Қаң. 8, 2022, 11:15 Т.Қ.

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

          Виктор Калесников
          • Қаң. 8, 2022, 11:17 Т.Қ.

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

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

            Виктор Калесников
            • Қаң. 8, 2022, 11:22 Т.Қ.
            • (өңделген)

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

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

              Пікірлер

              Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
              Кіріңіз немесе Тіркеліңіз