我有一个名为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;)'
感谢是否有人可以帮助我...
答案 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();
^
您似乎正在尝试在堆上分配对象而不是堆栈,这很好,所以它可能只是一个错字。
另外需要注意的是,请确保它不会泄漏内存,即为其设置父(直接或间接),或使用智能指针。我会建议前者。这将保证在删除父项时自动删除指针。