1

我有一个名为 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&) ':/usr/include/qt4/QtCore/qabstractitemmodel.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&)”首先需要在这里

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

4

1 回答 1

2

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

该错误消息意味着您正在尝试复制一个不完全具有“值”语义但更像“身份”的 QObject。QObject 本质上是不可复制的。原因是在这种情况下你会如何处理父/子层次结构?

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

这是您的代码中有问题的地方:

QSqlQueryModel  model = new QSqlQueryModel();

这似乎缺少如下开始:

QSqlQueryModel *model = new QSqlQueryModel();
               ^

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

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

于 2014-05-05T08:20:56.920 回答