2015-05-19 214 views
-1

我有一個循環,填充我的textBrowser部件。現在我想在我的循環中有1秒延遲。我希望他追加一行並等待1秒,然後再填充另一行。 我在我的循環中嘗試了睡眠,但它不起作用。他毫不拖延地填寫我的文本瀏覽器。QT CPP延遲for循環

*#include <QThread>* 
.. 
sleep(1); 

我的代碼看起來像這樣:

for(int i = 0; i < array.count(); i++) 

    {  
    QString br = "ID-->"+array[i]; 
    ui->textBrowser->append(br); 
    } 

我怎麼能耽誤我的循環?

+0

請詳細說明「不起作用」,* how *不起作用嗎?當您構建或運行應用程序時會發生什麼? –

+0

*編輯(他毫不拖延地填寫我的文本瀏覽器) – user3676560

+1

您是否嘗試過使用QTimer? –

回答

1

最好使用形成QTimer的事件而不是使用循環。舉個例子,你可以使用像下面這樣的插槽。

int i = 0; 

void MainWindow::OnTimer() 
{ 
    QString br = "ID-->" + array[i++]; 
    ui->textBrowser->append(br); 
    if (i < array.count()) 
    { 
     QTimer::singleShot(1000, this, SLOT(OnTimer())); 
    } 
} 

你將不得不繼續arrayi爲一類變量。

但是,如果您只是想以某種方式完成此操作,則可以在循環中使用以下代碼,而不是sleep。這會阻止for循環,但會繼續處理事件,以便迭代時UI將得到更新。但它是一種黑客。

QEventLoop loop; 
QTimer::singleShot(1000, &loop, SLOT(quit())); 
loop.exec(); 
+0

是否有可能他不覆蓋我的textbrowser行?我希望他每循環創建一行。 – user3676560