首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能使用QAxObject读取两次文件数据

不能使用QAxObject读取两次文件数据
EN

Stack Overflow用户
提问于 2013-10-29 19:50:15
回答 1查看 1K关注 0票数 0

我使用QAxBaseQAxObject读取excel文件。

我得到了全局变量QAxObject* db_workbook;,其中我在excel中存储指向某个工作簿的指针(不知道它为什么那样调用,但无论如何)。我需要它,因为通过它,我需要获得excel文件数据的几个功能,而不仅仅是一个。

readExcelFile方法执行良好时,在test_function()中将出现异常

出现在这一行sheet_N = db_workbook->querySubObject("Worksheets(int)", 1);

为什么会发生这种情况,以及如何解决?

代码部分在这里

代码语言:javascript
复制
//
QAxObject* db_workbook;

//for read what we need to
void importdb_module::readExcelFile(QAxObject* excel, QString& file_path){

    if(initExcel(excel)){

        QAxObject* workbooks = excel->querySubObject("WorkBooks");
        workbooks->dynamicCall("Open (const QString&)", file_path);
        QAxObject* workbook = excel->querySubObject("ActiveWorkBook");
        db_workbook = workbook;//global ptr points same adress now
        QAxObject* worksheets = workbook->querySubObject("WorkSheets");

        //test getting sheet num 1 name
        QAxObject* sheet_hh = workbook->querySubObject("Worksheets(int)", 1);

        QString sheet_name = sheet_hh->property("Name").toString();

        qDebug()<<sheet_name<<"TEST!";//here everything works fine
    }
}

void importdb_module::test_function(){
    QAxObject* sheet_N;
    //ERROR IS HERE!
    sheet_N = db_workbook->querySubObject("Worksheets(int)", 1);

    QString sheet_name = sheet_N->property("Name").toString();

    qDebug()<<sheet_name;
}


//executes on button click
void importdb_module::testExlOp(QString &_path){
    QAxObject* excel;
    QStringList spreadsheet_list; //get spreadsheet list when opening file
    QString path = _path;//gonna use GUI choose

    if(initExcel(excel)){
        if (readExcelFile(excel, path)){
            //
            test_function();
            excel->dynamicCall("Quit(void)");
            }else{
            //error output
            QMessageBox::information(0, "", "Error");
        }
    }


    delete excel;
}

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-29 21:54:34

可能你有一个悬空的指针。使用QPointer<QAxObject>而不是裸指针。当QAxObject实例被销毁时,它将自己重置为null。

一般来说,在这个时代,你不应该用裸露的指针来做任何不被其他东西隐式拥有的东西。这意味着对于有父母的QObjects,您不需要使用智能指针(尽管它不会伤害任何指针)。一般来说,聪明的指针是无害的。用它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19667804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档