2010-11-26 12 views
2

に私は(つまり、あなたが/パン、ズーム、マップの複数が表示されますすることができます)、Googleマップと同様の機能でのQtのGUIアプリケーションを構築しています。現時点では、(ハードドライブから)必要な画像の256ピクセルブロックを動的にロードしています。ストリーミングQImagesは、Qtの4.7

は、あなたが想像できるように、これは私がパンやズームをしていたときに私のプログラムを遅くします。私は別のスレッド(MapLoader)を使用して、必要に応じて画像をロードしたいと考えています。

マイデータクラスは、画像への三重のポインタを有している(すなわち、QImageの* [X] [Y])。ビューポートの外側の画像はnullですが、ビューポートの内側の画像はQImageポインタです。

私の問題は、私は私の画家は、画像の配列にアクセスし、(関係なく、それらがロードされているかどうかの)それらを描くことができるようにしたいです。同時に、アレイへのアクセスをブロックすることなく、アレイに画像をロードする。私はこの問題を解決するに取り掛かることができますどのように

?画像の配列は揮発性でなければならないのですか?

答えて

0

あなたの状況に関連するだろうテストアプリケーションの(ビデオ付き)QtLabs上の素敵なデモがあります。これは、画像をグリッドにロードする画像ブラウザです。著者は最適な解決策ではないと述べていますが、スレッドを使用してコンテンツを読み込むための有益な情報が含まれているはずです。あなたはhereを見ることができます。コメント欄にも興味深いリンクがあると思います。

0

画像の読み込みをワーカースレッドに任せることができます。画像の準備ができたら、画像の場所とともに、それらのスレッドに何らかの兆候があるかどうかを知らせる必要があります。 (QtConcurrentを使うと、これが私の最初の傾向になります。)信号/スロット接続を使用する場合、デフォルトでQtはスロットが適切なスレッドで実行されていることを確認します。そのため、画像クラスをUIスレッドに入れ、ワーカースレッドが画像を読み込んだときに信号を出力し、画像クラスのスロット(UIスレッドコンテキスト内にある)に画像を適切に保存させます。マップへの割り当てとマップからの読み込みは同じスレッドコンテキスト内にあるので、揮発性のマーキングやロックを行う必要はありません。

関連する問題