-1

Qtでクロールを始めたところです。Ubuntuマシンにqt4をインストールし、いくつかの基本的な例を試しました。現在、マルチスレッドアプリケーションの開発を試みています。まず、pthreadとQthreadのどちらを使用するか混乱しています。誰かがどちらを使うのが良いか教えてもらえますか?

さらに私のアプリケーションでは、あるスレッドから別のスレッドにいくつかの値を送信します。2番目のスレッドはそれらをボックスに印刷します。私の質問は、メインスレッド以外のスレッドがメインウィンドウにウィジェットを追加できるかどうかです。

4

2 に答える 2

3
  1. を使用しQThreadます。内部的に使用されpthreadsますが、依存する必要はなく、pthreads(潜在的に) 他のプラットフォームや OS でも同様にプログラムを実行できます。
  2. QWidgetワーカー スレッドからインスタンスを作成することはできません。Qt には GUI スレッドが 1 つしかありません: を実行するスレッドmain()です。このスレッドだけが、ウィンドウ マネージャと通信するもの (ウィジェットとピックスマップ) を作成できます。

したがって、スレッド間では、データのみを通信します。GUI スレッドはそれ自体でグラフィカル ユーザー インターフェイスを管理し、ワーカー スレッドからデータを受け取るだけです。マルチスレッド アプリケーションの実装方法については、Qt のドキュメントを参照してください。

于 2012-10-15T12:15:16.853 に答える
0

メインウィジェットの1つを「見つける」ことができるQApplication静的メソッドを持つ which を使用できます。topLevelWidgets()

このような:

#include <QApplication>   

foreach(QWidget *widget, QApplication::topLevelWidgets())
{
    if(widget->accessibleName() == "YourMainWidgetName")
    {
        myMainTopWidget = widget;
    }
}

あるスレッドから別のスレッドに値を送信するときは、シグナルとスロットを使用します。それらはスレッドセーフで使いやすいです。

于 2012-10-15T09:22:09.703 に答える