0

Qt GUIのQLabelのQPixmapに別のスレッドでアクセスします。これは、最終的にこれを使用してQLabelでmjpegストリームを表示するためです。最も簡単な方法
であるため、QLabelを使用することにしました。非GUI)スレッド。

QLabelには何も表示されません。QPixmap: It is not safe to use pixmaps outside the GUI thread
これを行うためのより良いまたは正しい方法は例外ですか?
これが別のスレッドの私のPyQtコードです: self.theQlabel.setPixmap(QtGui.QPixmap.fromImage(myQimg)

4

3 に答える 3

2

GUIスレッド以外で作成するのも危険かもしれないと思います。メインスレッドでaQPixmapを渡し、QImageそれをaに変換することを検討することをお勧めします。QPixmapこの主張を裏付ける直接の参照は見つかりませんが、

http://developer.qt.nokia.com/doc/qt-4.8/thread-basics.html

そのヒント

すべてのウィジェットといくつかの関連クラス(QPixmapなど)は、セカンダリスレッドでは機能しません。

のメールスレッド

http://lists.trolltech.com/qt-interest/2008-11/msg00534.html

また、私に同意するようです。

于 2012-02-21T08:26:14.307 に答える
2

ピックスマップを直接設定する代わりに、外部スレッドにupdatePixmapシグナルを送信させます。次に、GUIスレッドで、信号をリッスンし、その時点でpixampを更新します。そのようなものが機能するはずです(C ++で):

// In the GUI thread:

class YourWidget: QObject {

public:

    YourWidget();

public slots:

    void updatePixmap(const QPixmap& pixmap);

}

YourWidget::YourWidget() {
    // Connect to the signal here:
    QObject::connect(otherThread, SIGNAL(updatePixmap(const QPixmap&)), this, SLOT(updatePixmap(const QPixmap&)));
}

YourWidget::void updatePixmap(const QPixmap& pixmap) {
    // Update the pixmap here in a thread-safe way
}


// In the external thread:

// Emit the signal. The GUI thread will receive it and can then update the pixmap
emit updatePixmap(thePixmap);
于 2012-01-02T14:28:05.257 に答える
1

このQLabelのwinId()にRAW DirectX / OpenGL OSコンテキストを作成し、必要な操作を行います。私は、これが高性能HDビデオの最良の方法であり、唯一の方法だと思います:)最大のパフォーマンスを達成し、コンピューターの鉄に触れるためにRAWのものを使用する必要がある場合があります:)

于 2013-07-29T15:56:07.560 に答える