Функции, связанные с сигналами в QtScript (в Qt 4.5.2), не запускаются - PullRequest
2 голосов
/ 03 мая 2010

Я внедрил в проприетарное приложение Qt (4.5.2), добавил свою собственную совместимую сборку QtScript и сумел получить доступ ко всем необходимым мне сигналам. Однако при подключении к ним (через QtScript) мои функции никогда не вызываются.

Я выдвинул несколько теорий, почему это так, и я проверил все, что мог придумать, но я натолкнулся на стену. Обратите внимание, у меня никогда не было никаких исключений при подключении. Вот мои текущие теории:

  • Сигналы, к которым я подключаюсь, уже подключены к другим слотам, и это как-то блокирует их (но, насколько я знаю, все сигналы Qt срабатывают во всех слотах без дополнительной работы и не могут быть ограничены в этом способ)
  • Сигналы отклоняют мое соединение или разъединяют меня после соединения (но я не вижу возможности для этого)
  • Мое соединение происходит из другого потока, и это как-то заставляет его не соединяться должным образом

Является ли какая-либо из этих теорий правдоподобной? Если нет, то что я пропустил?

Ответы [ 2 ]

3 голосов
/ 03 мая 2010

После долгих копаний по внутренним объектам и задавая много вопросов (а именно здесь и в #qt о Freenode) мне удалось заставить его работать. Проблема заключалась в том, что мой внедренный код работал в собственном потоке без насоса событий. Создание экземпляра QEventLoop и регулярный вызов processEvents () решили эту проблему.

0 голосов
/ 05 августа 2011

Этот вопрос действительно старый и уже ответил, но для тех, кто приходит сюда в поисках помощи, и для тех, кто выше, не является хорошим решением, вы можете рассмотреть возможность установки Qt :: ConnectionType в оператор connect к Qt :: DirectConnection примерно так:

QObject::connect(scrollBar, SIGNAL(valueChanged(int)),
                 label,  SLOT(setNum(int)),
                 Qt::DirectConnection);

Что должно решить ту же проблему другим способом.

...