如何将一个简单的QSqlQueryModel从一个类返回到另一个类?

时间:2014-05-05 09:27:20

标签: c++ mysql qt qsqlquery

我只想处理数据库并将结果添加到模型中并将其发送到另一个类并在GUI中查看。摘要代码是:

我有一个公共类成员:

QSqlQueryModel  *model;

加载数据并将其添加到模型并返回模型:

QSqlQueryModel* PersistenceAdapter::loadServerList(){
    cout<<"Loading data"<<endl;
    QSqlQuery* qry = new QSqlQuery(db);
    qry->prepare("select * from student1.SERVERLIST");
    model = new QSqlQueryModel();
    model->setQuery(*qry);
    return model;
}

在其他课程中我有一个加载列表功能。错误来自这里:

void MainWindow::setServersList(QSqlQueryModel *myModel) {
    widget.serverListView->setModel(myModel);
}

然后我从同一个类的构造函数中调用它,这里是代码:

MainWindow::MainWindow() {
    //Stablish connection to database
    PersistenceAdapter *p = new PersistenceAdapter();
    setServersList(p->loadServerList());
}

错误是:

  

跑完了;分段故障;核心倾销;实时:210ms;用户:10ms;系统:40ms

感谢是否有人可以提供帮助。

2 个答案:

答案 0 :(得分:1)

您的代码中存在多个错误。此外,以下是一些针对您的情况的提示:

  1. 您确定您的model成员已初始化/实例化了吗? 要检查它,只需if model!=NULL检查。
  2. 您确定db(在PersistenceAdapter::loadServerList()中)是否已实例化? _要检查它,只需if model!=NULL检查。另外,检查数据库是否已成功打开,并在使用时检查它是否isOpen。请记住,在执行多线程数据库访问时可能会出现一些错误。
  3. 我不建议您创建QSqlQuery,而是可以使用其他setQuery method
  4. 应用查询后,请检查:if (model.lastError().isValid()) qDebug() << model.lastError();
  5. 检查调用函数的顺序 - 如果实例化db比访问db更早,依此类推。
  6. 希望这些提示能够得到启发。祝你好运!

答案 1 :(得分:0)

  

widget.serverListView-&GT;则setModel(基于myModel);

所以,崩溃只能在那里。由于小部件似乎在堆上(这是一个坏主意),崩溃的唯一原因是您的服务器列表视图在该阶段未正确初始化,因此它是空指针或悬空。

这看起来也很合理,因为您似乎没有在主窗口构造函数中初始化窗口小部件的视图。如果你这样做,崩溃就会消失。