如何从一个类返回一个简单的QSqlQueryModel到另一个类
How to return a simple QSqlQueryModel from a class to another class?
我只是想在数据库上处理并将结果添加到模型中,并将其发送到另一个类并在GUI中查看。摘要代码为:
我有一个公共类成员:
QSqlQueryModel *model;
加载数据并将其添加到模型中并返回模型:
QSqlQueryModel* PersistenceAdapter::loadServerList(){
cout<<"Loading data"<<endl;
QSqlQuery* qry = new QSqlQuery(db);
qry->prepare("select * from student1.SERVERLIST");
model = new QSqlQueryModel();
model->setQuery(*qry);
return model;
}
在其他类中,我有一个加载列表函数。错误来自这里:
void MainWindow::setServersList(QSqlQueryModel *myModel) {
widget.serverListView->setModel(myModel);
}
然后我从同一个类的构造函数调用它,下面是代码:
MainWindow::MainWindow() {
//Stablish connection to database
PersistenceAdapter *p = new PersistenceAdapter();
setServersList(p->loadServerList());
}
错误是:
运行完成;段错误;核心倾倒;实时性:210ms;用户:10 ms;系统:40毫秒
如果有人能帮忙,我很感激。
你的代码中有几个错误。此外,这里有一些针对你的情况的提示和技巧:
- 你确定你的
- 你确定你的
db
(在PersistenceAdapter::loadServerList()
中)被实例化了吗?要检查它只需执行if model!=NULL
check。另外,检查数据库是否成功打开,并检查它在使用时是否为isOpen
。请记住,你可以得到一些错误,而做多线程数据库访问。 - 我不建议创建
QSqlQuery
,相反,您可以使用另一种setQuery
方法。 - 应用查询后,请检查:
if (model.lastError().isValid()) qDebug() << model.lastError();
- 检查调用函数的顺序——如果实例化
db
比访问db
更早,等等。
model
成员已经初始化/实例化了吗?检查if model!=NULL
检查希望这些技巧能对你有所启发。好运!
widget.serverListView -> setModel (myModel);
所以,坠机只能发生在那里。由于小部件似乎在堆上(这是一个坏主意),导致崩溃的唯一原因是您的服务器列表视图在该阶段没有正确初始化,因此它要么是空指针,要么是悬空。
这看起来也合乎逻辑,因为您似乎没有在主窗口构造函数中初始化小部件的视图。如果您这样做,崩溃将消失。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 预处理器:插入结构名称中的前一个行号
- 我在c++代码中生成了一个运行时#3异常
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 从链接列表c++中删除一个项目
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '