我正面临一个小(也许不是)问题。我有一个解析 XML 文件的函数(非常大的 xml ~1Gb),所以它需要很多时间(5-6 分钟才能完成函数)。由于已知问题,我不想在 GUI 线程中使用它(主窗口冻结并且没有发生任何事情,所以用户认为一切都出错了)。我试图通过使用来解决这个问题
QtConcurrent::run
但是又出现了一个问题:如果用户按下 X(右上角的关闭按钮)主 GUI 线程关闭,但生成的子线程我的 QtConcurrent::run 继续他的工作,我只能通过任务管理器杀死他。
我决定使用 QThread 而不是 QtConcurrent::run6 但我不明白如何运行 MainWindow 类函数:
void MainWindow::parseXML()
我试图像这样创建smth:
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 函数更改状态栏)
我应该怎么办?