C++ 如何从C++;?

C++ 如何从C++;?,c++,qt,qobject,qtsql,qsqlquery,C++,Qt,Qobject,Qtsql,Qsqlquery,我有一个名为Load的类,它从数据库加载数据。另一个类是在表中显示数据。在函数中,我返回QSqlQueryModel,它是: 目前是基本的,因为我无法编译它: QSqlQueryModel PersistenceAdapter::loadServerList(){ login(); cout<<"Loading data"<<endl; QSqlQueryModel model = new QSqlQueryModel(); log

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

QSqlQueryModel PersistenceAdapter::loadServerList(){

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

    QSqlQueryModel  model = new QSqlQueryModel();

    logout();
    return model;
}
在另一节课上,我收到的是:

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/qabstractemmodel.h:在复制构造函数“QSqlQueryModel::QSqlQueryModel(const QSqlQueryModel&)”中: /usr/include/qt4/QtCore/qabstracttemmodel.h:360:5:错误:“QAbstractTableModel::QAbstractTableModel(const QAbstractTableModel&)”是私有的 /usr/include/qt4/QtSql/qsqlquerymodel.h:59:20:错误:在此上下文中 PersistenceAdapter.cpp:在成员函数“QSqlQueryModel PersistenceAdapter::loadServerList()”中: PersistenceAdapter.cpp:70:12:注意:这里首先需要合成方法'QSqlQueryModel::QSqlQueryModel(const QSqlQueryModel&')

如果有人能帮我,我将不胜感激

/usr/include/qt4/QtCore/qabstracttemmodel.h:360:5:错误:“QAbstractTableModel::QAbstractTableModel(const QAbstractTableModel&)”是私有的

该错误消息意味着您正试图复制一个QObject,它不完全具有“value”语义,但更像是“identity”。QoObject本质上是不可复制的。原因是,在这种情况下,您将如何处理父/子层次结构

这会提示您试图误用QObject子类实例,即将其声明为堆栈对象而不是堆

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

QSqlQueryModel  model = new QSqlQueryModel();
这似乎错过了一个开始,如下所示:

QSqlQueryModel *model = new QSqlQueryModel();
               ^
看起来您试图在堆上分配对象,而不是在堆栈上分配对象,这很好,所以这可能只是一个输入错误


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

首先,如果动态分配QSqlQueryModel,您将收到指向它的指针,不是吗?所以
QSqlQueryModel*model=newqsqlquerymodel()。然后,您应该返回模型的引用或指针,而不是尝试在返回时复制它,这似乎是禁止的。当您的原始问题得到修复时,请不要用新问题编辑您的问题。这会使发布的答案无效。改为创建一个新问题,但只有在您自己尝试新问题之后。我刚刚问了另一个问题…我将其更改为分配堆,但现在我遇到了分段错误@伯纳德:在setServersList中?@Bernard:好吧,你还没有显示代码。
QSqlQueryModel *model = new QSqlQueryModel();
               ^