GUIGrep v1.0
公開しました。
さて、今回のバージョンは、プログラム的にちょいと面白いことをしています。
Windowsのプログラムでもそうですが、所謂ボタンを押して処理をするタイプのプログラムは、ボタンを押した先に重たい処理があると、画面が固まったようになってしまいます。
GUIGrepの以前のバージョンもご多分に漏れず、検索中は一切のキー入力を受け付けませんでしたし、画面描画も時々思い出したように行われる感じでした。
このような事態を回避するためには、マルチスレッドとするか、タイマーイベントにするのが主流だと思います。
ですが、残念ながら、SLザウルスのプラットフォームであるQT/Eには、QThreadはサポートされていませんし、ループ処理をQTimerで書くのはややこしいのでやりたくありません。
たとえば、VisualBasicには、DoEventsという命令があり、ループの途中に入れることによって、イベント処理中でも他のイベントを受信することができます。
QT/Eでもこんなこと出来ないのでしょうか?
…などと思ってQT Ref.を眺めていると、ありました。
QApplication::processEvents()です。
所謂、イベントループの本体じゃないの?というもので、実行すると他のGUI部品がイベントを受け取れるようになり、あたかもマルチスレッド処理をさせているかのような状態になります。
#中断機能はこれで実装しています。
しかし、QApplicationなんて、QWidgetから参照できる機能なぞありませんので、メインフォームが自分のQApplicationオブジェクトへのポインタを持つことが出来るようにしておいて、main関数内で引き渡し、利用しています。
これ、個人的には結構使えるTipsだと思うのですが、ぐぐっても使ってる人にあまり出会わないのは、危ない処理なんでしょうか…(^^;?
#とりあえず、今のところは大丈夫みたいですけど…