質問: ちょっと漠然としてしまうのですが・・・ Linux 上のQtCreatorで作成したアプリ(C++)が、ファイル操作などをしているとマウスのイベントが上がらなくなってしまいます。 ファイル操作はGUIに影響しないようにQtimerのイベント内などで処理したりしていて、どこかのイベントやスレッドで固まっているようなのですが、何処でプログラムが止まっているかなどを知る方法は無いでしょうか? qDebugなどで各イベントの入口と出口で出力していて、今のところ仕掛けたところは、ちゃんと完了しているのは確認しているのですが、正直言ってどうデバッグすればいいのかわかりません。 環境はツールを提供したメーカーによってライブラリのバージョンが固定されていて * Qt Creator 4.2.1 * Qt5.8.0 となっています。 また、イベントが発生しなくなるのはラベルコントロールに追加した ``` void mousePressEvent(QMouseEvent *event) override: void mouseReleaseEvent(QMouseEvent *event) override: ``` です。 mousePressEventも発生しなくなるような状況というのも良くわからなくて困っています。
回答: Qtのイベント処理は(`QTimer`の`TimerEvent`含め)シングルスレッドで実施されているので、 イベントハンドラ内で時間のかかる処理をすると、質問にあるような、マウス操作に反応しなくなる、 という事象が発生します。 ですので、プログラム全体を確認して、時間のかかっている処理をイベントハンドラ内で実行していないか 確認するのがよいと思います。 そして、前述のようなあれば、 * 時分割処理にしてイベントハンドラをすぐ抜けるようにする * 別スレッドを生成して、そちらで時間のかかる処理を行うようにする 等の修正を行うと事象が解消されると思います。 いかがでしょうか?