0

マルチセグメントのダウンロードマネージャーに取り組んでいます。セグメンテーション手順を表示したい。QGraphicsScene は正常に動作しますが、残念ながらダウンロードが遅くなります。QProgressBars を使用する以外に、より良いオプションはありますか。QNetworkAccessManager を使用してファイルをダウンロードしています。QNetworkManager オブジェクトの downloadProgress シグナルを、QGraphicsView を描画するメイン GUI スレッドのスロットに接続すると、場合によっては最大 10 倍もダウンロード速度が低下します。

    // a custom progress bar
void Download::showGProgress(int num, float prgrss)                                 //slot
{
    prgrss=prgrss/100;
    x_coord=(ui->graphicsView_2->width()-3)*prgrss;                              
    for(float b=0;b<=x_coord;b=b+0.5)
    {
        progress.addRect(0,0,x_coord,y_coord);

    }

}
4

3 に答える 3

1

QNetworkAccessManagerスレッド化されていません。現在のスレッドのイベントループを使用して、非同期です。スレッド化された側面であるのは、それが作成する HTTP リクエストです。

これは、メイン スレッドで何かを行うと、理論的にはダウンロードの動作が遅くなる理由を説明しています。根底にあるスレッド化されたダウンロード自体である必要はありませんが、それについての迅速なフィードバックを可能にするシグナリング応答時間です。

おそらくすべきことは、独自の QThread サブクラスを作成QNetworkAccessManagerし、run() メソッドで作成することです。そしてQEventLoop、スレッドに a を作成して呼び出しますexec()

簡単に言えば、独自の Threaded QNetworkAccessManager を作成する必要があります。

于 2012-08-31T23:41:45.570 に答える
1

独自のウィジェットを作成して、やりたいことを行います

これは思ったより簡単です。

QWidget からサブクラス化するクラスを作成します。そして、このウィジェットで、100 個の Qlabels を含む Horizo​​ntal Sizer を作成します (QLabels をベクトルに格納します)。各 QLabel の背景色を異なる色に設定して、現在の進行状況を「更新」するスロットを与えます。つまり、現在の「パーセンテージ」をメンバー変数として保存し、探しているパーセンテージに到達するために必要なフィールドのみを調整します (これにより、いくつかのちらつきがなくなります。毎回ゼロから行う)。

サイザーを水平方向ではなく垂直方向に切り替える関数を追加して、さらにカスタマイズ可能にします。

これにより、各要素が異なる画像、異なる色、またはあなたが望むものになる可能性があるため、プログレスバーに対してできることを創造的にすることができます.

于 2012-08-31T17:45:02.520 に答える
0

QProgressBar を試しましたか? 独自のプロパティを処理するために、そのサブクラスを作成できるかもしれません。

于 2012-08-31T17:47:33.220 に答える