Я пытаюсь показать некоторые подключенные / отключенные сообщения в строке состояния в моем приложении. Это консольное приложение, написанное на 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. Тогда как я могу отобразить изменения статуса подключения в строке состояния?
Вам не разрешено делать прямые вызовы GUI из потоков не-GUI. Вместо этого вам нужно установить соединение сигнал / слот. Создайте сигнал в классе, где вы реализуете свой обработчик соединения, и подключите его к showMessage()
слот вашей строки состояния. Когда вы хотите показать что-то в строке состояния, подайте сигнал и передайте соответствующее сообщение.
Других решений пока нет …