Показать сообщение в строке состояния от обратного вызова в другой теме

Я пытаюсь показать некоторые подключенные / отключенные сообщения в строке состояния в моем приложении. Это консольное приложение, написанное на c ++, с графическим интерфейсом Qt. Когда что-то изменяется в состоянии соединений, обработчик соединения вызывает обратный вызов (в некотором объекте, связанном с графическим интерфейсом), который обновляет графический интерфейс. Я могу рисовать на своем QGraphicsScene, но когда я пытаюсь использовать метод showMessage из QStatusBar, иногда он сразу падает, иногда работает до нескольких вызовов (но сообщение не исчезает после истечения времени ожидания). Я получаю это сообщение об ошибке:

QObject: Cannot create children for a parent that is in a different thread.
(Parent is QStatusBar(0xae55feb0), parent's thread is QThread(0xb3e006f0), current thread is QThread(0xb0c00478)
QObject::startTimer: QTimer can only be used with threads started with QThread
QPixmap: It is not safe to use pixmaps outside the GUI thread

Я думаю, что это означает, что showMessage не вызывается из потока GUI. Тогда как я могу отобразить изменения статуса подключения в строке состояния?

2

Решение

Вам не разрешено делать прямые вызовы GUI из потоков не-GUI. Вместо этого вам нужно установить соединение сигнал / слот. Создайте сигнал в классе, где вы реализуете свой обработчик соединения, и подключите его к showMessage() слот вашей строки состояния. Когда вы хотите показать что-то в строке состояния, подайте сигнал и передайте соответствующее сообщение.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]