Multithreading 用Qt处理多线程Excel?
我正试图处理一张Excel表格,用Qt(4.6.3)对其中的数据进行处理。 我尝试使用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
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()