如何从C ++中的函数返回QSqlQueryModel?

时间:2014-05-05 08:02:01

标签: c++ qt qobject qtsql qsqlquery

我有一个名为Load的类,它正在从数据库加载数据。另一个类是在表中显示数据。在函数中我返回QSqlQueryModel,它是: 目前只是基本因为我无法编译它:

QSqlQueryModel PersistenceAdapter::loadServerList(){

    login();
    cout<<"Loading data"<<endl;

    QSqlQueryModel  model = new QSqlQueryModel();

    logout();
    return model;
}
头文件中的

定义为:

QSqlQueryModel loadServerList();

在另一堂课中,我收到:

setServersList(PersistenceAdapter.loadServerList());

这个的定义是:

void MainWindow::setServersList(QSqlQueryModel serverdata) {

    //this->servers = serverdata;
    //this->amodel->addData(serverdata);
}

错误是:

  

PersistenceAdapter.cpp:66:48:错误:从'QSqlQueryModel *'转换为非标量类型'QSqlQueryModel'请求       /usr/include/qt4/QtCore/qabstractitemmodel.h:在复制构造函数'QSqlQueryModel :: QSqlQueryModel(const QSqlQueryModel&amp;)'中:       /usr/include/qt4/QtCore/qabstractitemmodel.h:360:5:错误:'QAbstractTableModel :: QAbstractTableModel(const QAbstractTableModel&amp;)'是私有的       /usr/include/qt4/QtSql/qsqlquerymodel.h:59:20:错误:在此上下文中       PersistenceAdapter.cpp:在成员函数'QSqlQueryModel PersistenceAdapter :: loadServerList()'中:       PersistenceAdapter.cpp:70:12:注意:首先需要合成方法'QSqlQueryModel :: QSqlQueryModel(const QSqlQueryModel&amp;)'

感谢是否有人可以帮助我...

1 个答案:

答案 0 :(得分:2)

  

/usr/include/qt4/QtCore/qabstractitemmodel.h:360:5:错误:'QAbstractTableModel :: QAbstractTableModel(const QAbstractTableModel&amp;)'是私有的

该错误消息意味着您正在尝试复制一个不具有“value”语义的QObject,但更像是“identity”。 QObject本质上是不可复制的。原因是在这种情况下你会对父/子层次结构做些什么?

这会给你一些暗示,你试图滥用你的QObject子类实例,即将它声明为堆栈对象而不是堆。

这是代码中存在问题的地方:

QSqlQueryModel  model = new QSqlQueryModel();

这似乎错过了开头如下:

QSqlQueryModel *model = new QSqlQueryModel();
               ^

您似乎正在尝试在堆上分配对象而不是堆栈,这很好,所以它可能只是一个错字。

另外需要注意的是,请确保它不会泄漏内存,即为其设置父(直接或间接),或使用智能指针。我会建议前者。这将保证在删除父项时自动删除指针。