Qt4その後

以前からハマってたCoin問題とも関連する話題.Qt3はスレッド周りが非常に繊細だったのだが,「Qt4はスレッドセーフになった.Qt4ではSIGNAL+SLOTもスレッドを超えて任意のオブジェクトに設定できる」という話なので,でっきりWidgetなどグラフィック周りの機能もバシバシ行けるのかと思ってたら,そうじゃないらしい.
結局,X11にしろWindowsにしろ,現存のWindow Systemは,プログラムを起動したスレッド(=GUI Thread)以外からグラフィックをいじることができない仕様になっているそうな.つまり,これってQt側の問題ではないということ.がびーん.今まで俺が書いたQt関係のプログラム,実は全部危険かもしれんぞ.
もちろん,そういうリソース周りの管理まで含めてライブラリで対処してくれるものもあるだろうが,Qtは基本的にそこまで面倒みてくれない.じゃ,別スレッドからWidgetをほげほげしたい場合にどうするかというと,customEvent()を使ってイベントを飛ばして対処するということだ.ううっ…てっきりQt4になればcustomEvent()から逃れられると思ったのに…しかもcustomEvent()の仕様も微妙に変わってる+ドキュメントが不親切で,けっこうハマった.
これで大半の問題は解決できた(おそらく,理不尽に落ちることは無くなったはず)が,ダブルバッファがうまくいかない問題が残ってる.これは全く原因がわからんのよね…多分,QPixmapの仕様変更の影響だろうと思うのだが…