У меня есть один класс под названием 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&) ‘Сначала требуется здесь
Спасибо, если кто-нибудь может мне помочь с этим …
/usr/include/qt4/QtCore/qabstractitemmodel.h:360:5: ошибка: ‘QAbstractTableModel :: QAbstractTableModel (const QAbstractTableModel&) ’Является частной
Это сообщение об ошибке означает, что вы пытаетесь скопировать объект QObject, который не совсем имеет семантику «значение», но больше похож на «идентичность». Объекты QO по своей сути не копируются. Причина в том, что вы будете делать с иерархией родитель / потомок в таких случаях?
Это дает вам некоторый намек на то, что вы пытаетесь использовать ваш экземпляр подкласса QObject неправильно, то есть объявляете его как объект стека, а не как кучу.
Это проблемное место в вашем коде:
QSqlQueryModel model = new QSqlQueryModel();
Похоже, что это пропускает начало следующим образом:
QSqlQueryModel *model = new QSqlQueryModel();
^
Кажется, что вы пытаетесь разместить объект в куче, а не в стеке, и это хорошо, так что, возможно, это просто опечатка.
Еще одно замечание: убедитесь, что оно не будет пропускать память, т. Е. Либо установить для него родительский (прямой или косвенный) тип, либо использовать умные указатели. Я бы предложил первое. Это гарантирует, что ваш указатель будет автоматически удален при удалении родителя.