LINUX.ORG.RU
Ответ на: комментарий от Adonai

Вот скорее всего он в другом треде эмитируется. Но не QThread.

Но ведь как я понял, сигнал по умолчанию поставится в очередь? И другой тред на время получения сигнала заблокируется, верно? Ну так вот, ничего не блокируется. Сигнал эмитируется, но слот не вызывается.

hibou ★★★★★
() автор топика
Ответ на: комментарий от false

Ох... тут такой лес.. Долго выдергивать. Есть подозрение на треды. Тут они запилены без QThread.

hibou ★★★★★
() автор топика
Ответ на: комментарий от hibou

Может и из-за тредов, хз. Эт надо libastral компилять.

false ★★★★★
()
Ответ на: комментарий от Begemoth

В документации:

If no event loop is running, events won't be delivered to the object. For example, if you create a QTimer object in a thread but never call exec(), the QTimer will never emit its timeout() signal. Calling deleteLater() won't work either. (These restrictions apply to the main thread as well.)

Только я не понял, это про loop в главном потоке?

false ★★★★★
()
Ответ на: комментарий от Adonai

Какой тип соединения - Direct или Queued?

Он наверняка не указывает тип явно, оно там само рулит.

false ★★★★★
()
Ответ на: комментарий от Adonai

Все сигналы коннектятся по умолчанию, т.е. АutoConnect. Но, думаю, что остальные сигналы вызываются directly, так как они в одном треде. А этот, возможно в другом.

hibou ★★★★★
() автор топика

отсутствует minimal (non)working example

в треде более нуля ответов

А, так у вас здесь философский форум.

d_a ★★★★★
()
Ответ на: комментарий от false

Это про слоты, слоты вызываются в потоках, в которых работает QEventLoop.

Begemoth ★★★★★
()
Ответ на: комментарий от hibou

Тут надо заметить, что конкретный тип подключения по-умолчанию выбирается исходя из того к каким потокам принадлежат связываемые объекты (man QObject::moveToThread), а не из того в каком потоке вызывается сигнал.

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

Я тут эксперимент провел. Указал тип подключения.

Если указать QueuedConnection - то нифига не происходит. Слот не вызывается.

Если же указать DirectConnection - то приложение падает с криком, что доступ к гую может быть только из гуевого треда. (Видимо в этом случае слот вызвался. :) )

hibou ★★★★★
() автор топика
Ответ на: комментарий от nanoolinux

Тоже прихожу к этому выводу. Надо искать что блокирует.

hibou ★★★★★
() автор топика
Ответ на: комментарий от false

А минимальный код, воспроизводящий ситуацию можешь сделать?

Да тут сразу понятно, что код свести к минимальному будет нереально.

golodranez ★★★★
()

Connect может вернуть true на любую хрень. Можно засунуть SLOT(blabla(int)) - и ошибиться с сигнатурой - SLOT всё преобразует в строку и плевать хотел что в ней. Например у вас есть слот blabla(int), а вы написали blabla(unsigned) - connect-у на это пофиг, он не проверяет, но ничего не законнектится.

kiverattes ★☆
()

Проблема решена.

Если кому-то интересно. Дело было в кастомном типе данных. Кастомный тип нужно предварительно зарегистрировать в системе типов Qt. Без этого сигнал не будет работать.

hibou ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.