我站在一個小的(也許不是)問題面前。我有一個解析XML文件的函數(非常大的xml〜1Gb),所以需要很多時間(5-6分鐘完成func)。我不想在GUI線程中使用它,因爲已知的問題(mainwindow凍結並且什麼都沒有發生,所以用戶認爲一切都出錯了)。我試着用如何在另一個線程中運行一個函數
QtConcurrent::run
但更多的一個問題來解決這個問題出現了:如果用戶按X鍵(在右上角的關閉按鈕)主GUI線程下降,但其產生的孩子,我的線程QtConcurrent :: run繼續他的工作,我只能通過任務管理器殺死他。
我決定,而不是使用QtConcurrent :: RUN6 QThread的,但我不明白我怎麼可以運行MainWindow類功能:
void MainWindow::parseXML()
我試圖像這樣創建水木清華:
class pThread : public QThread
{
Q_OBJECT
private:
void run();
};
void pThread::run(){
MainWindow::parseXML();
}
但是,當我試圖編譯錯誤顯示:
cannot call member function 'void MainWindow::parseXML()' without object
而且,我不知道有可能通過此方法更新GUI線程(parseXML函數更改狀態欄)
我該怎麼辦?
請幫忙:(( – tema 2013-05-06 16:48:45