簡體   English   中英

如何在Qt中創建自定義多進度欄

[英]How to create a custom multi-progress bar in Qt

我正在研究一個多段下載管理器。 我想顯示細分程序。 QGraphicsScene工作正常但不幸的是它減慢了下載速度。 除了使用QProgressBars之外,還有更好的選擇嗎? 我正在使用QNetworkAccessManager下載文件。 如果我將QNetworkManager對象的downloadProgress信號連接到使用QGraphicsView的Main Gui Thread的插槽,在某些情況下下載速度甚至會降低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);

    }

}

創建自己的小部件來做你想做的事

這比聽起來容易。

創建一個來自QWidget的子類。 在這個小部件中,創建一個包含100個Qlabels的水平Sizer(將QLabel存儲在向量中)。 通過將每個QLabel的背景顏色設置為不同的顏色,為其“更新”當前進度提供插槽。 這應該是相當容易逐步進行的,這意味着您將當前的“百分比”存儲為成員變量,然后僅調整所需的字段以達到您要查找的百分比(如果您是這樣,這將消除一些閃爍)每次都從頭開始做。

添加將sizer切換為垂直的而不是水平的功能,以使其更具可定制性。

這使您可以在進度條的功能上獲得創意,因為每個元素可能是不同的圖片,或者是不同的顏色,或者您想要的任何顏色。

QNetworkAccessManager沒有線程化。 它是異步的,使用當前線程eventloop。 它創建的HTTP請求是線程方面。

這可以解釋為什么你在主線程中做的任何事情理論上都會減慢下載操作的速度。 雖然不一定是底層線程下載本身,而是信令響應時間,可以讓您快速反饋它。

您應該做的是創建自己的QThread子類,並在run()方法中創建QNetworkAccessManager 然后在線程中創建一個QEventLoop並調用exec()

簡而言之,您需要創建自己的Threaded QNetworkAccessManager。

你試過QProgressBar嗎? 也許你可以編寫它的子類來處理你自己的屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM