小弟在写一个导入excel数据到mysql的程序.
大致的UI是, 弹出一个dialog, 用户选择一个Excel文件, 点击"导入", dialog上播放"正在导入"的动画, 当导入成功之后, 提示用户导入成功,并关闭dialog.
如果我不用线程去做导入的工作, 在导入中的时候, dialog会"死"在那里. 也看不到"正在导入"的动画. 但是, 可以导入成功, 没其他问题.
之后, 我决定用一个线程去做导入的工作, 当完成之后, 会emit一个signal给主线程, 提示用户导入成功. 但是问题出现了:
我去创建QAxObject对象的时候, 会返回NULL, 而不用线程的时候, 能正常返回. 以下是部分代码:
void Thread::run()
{
if (importExcel(filename))
emit sigImportDone();
else
emit sigImportFail();
}
static bool importExcel(QString fileName)
{
QAxObject *excel = new QAxObject("Excel.Application", NULL);
Q_CHECK_PTR(excel);
if (excel == NULL)
return false;
/*** Get workbook's set pointer. ***/
QAxObject *workbooks = excel->querySubObject("Workbooks"); //问题就在这, 用QThread的子类去调用importExcel()的时候, 返回的workbooks是NULL. WHY????
if (workbooks == NULL)
{
// 退出Excel进程.
excel->dynamicCall("Quit()");
delete excel;
return false;
}
...
}
望各位不吝赐教! 多谢!