3

アプリケーションのステータス バーに接続/切断メッセージを表示しようとしています。これは、C++ で記述された Qt GUI を備えたコンソール アプリケーションです。接続ステータスで何かが変化すると、接続ハンドラーはコールバックを呼び出し (GUI 関連オブジェクトで)、GUI を更新します。QGraphicsScene を描画できますが、QStatusBar の showMessage メソッドを使用しようとすると、すぐにクラッシュすることもあれば、いくつかの呼び出しまで動作することもあります (ただし、タイムアウトが経過してもメッセージは消えません)。次のエラー メッセージが表示されます。

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 スレッドから呼び出されていないことを意味すると思います。次に、ステータスバーに接続ステータスの変化を表示するにはどうすればよいですか?

4

1 に答える 1

4

非 GUI スレッドから直接 GUI 呼び出しを行うことはできません。代わりに、シグナル/スロット接続をセットアップする必要があります。接続ハンドラを実装するクラスでシグナルを作成し、showMessage()ステータス バーのスロットに接続します。ステータス バーに何かを表示する場合は、シグナルを発行して適切なメッセージを渡します。

于 2012-11-27T13:21:54.170 に答える