Multithreading 用Qt处理多线程Excel?

Multithreading 用Qt处理多线程Excel?,multithreading,qt,activex,Multithreading,Qt,Activex,我正试图处理一张Excel表格,用Qt(4.6.3)对其中的数据进行处理。 我尝试使用QAxWidget excel(“excel.Application”) 我首先尝试在一个简单的方法中使用它,一切正常,但GUI冻结了一段时间,所以我尝试在另一个QThread中实现它 正如一些人所说,不允许在主线程之外的其他线程中使用从QWidget继承的类。 我也试过了,但还是出现了运行时错误 以下是我的代码片段: void MainDialog::extractData() { QAxWidget

我正试图处理一张Excel表格,用Qt(4.6.3)对其中的数据进行处理。 我尝试使用
QAxWidget excel(“excel.Application”)

我首先尝试在一个简单的方法中使用它,一切正常,但GUI冻结了一段时间,所以我尝试在另一个
QThread
中实现它

正如一些人所说,不允许在主线程之外的其他线程中使用从
QWidget
继承的类。 我也试过了,但还是出现了运行时错误

以下是我的代码片段:

void MainDialog::extractData()
{
    QAxWidget excel("Excel.Application");
    excel.setProperty("Visible", false);

    QAxObject * workbooks = excel.querySubObject("WorkBooks");
    workbooks->dynamicCall("Open (const QString&)", ui->lineEditAdress->text());
    QAxObject * workbook = excel.querySubObject("ActiveWorkBook");
    QAxObject * worksheet = workbook->querySubObject("Worksheets(int)", 1);

    // ... some work here...

    workbook->dynamicCall("Close (Boolean)", false);
    excel.dynamicCall("Quit (void)");
}
我做错了什么?有没有更好的方法来完成这项工作?比ActiveX更好的主意

谢谢

编辑: 正如Raiv所说,我用
QAxObject

只需在线程的run()中调用:

// ...
CoInitialize(0);
QAxObject excel("Excel.Application");
// ...

它工作正常。

尝试QAxObject而不是QAxWidget,它将在另一个线程中工作。只是别忘了在那里调用CoInitialize()