通过阅读QSqlTableModel文档,我看到了两种获得模型的方法:
QSqlTableModel *model = new QSqlTableModel(parentObject, database);和
QSqlTableModel model;在第二种情况下,选择了哪个数据库连接?在这一点上我需要主动连接吗?
我尝试了第二个,使QSqlTableModel model成为类成员。
class MyClass {
QSqlTableModel model;
public:
MyClass(){}
public slots:
onDbConnected(){
model.setTable("employee");
bool b = model.select();
}
};但是model.select()以这种方式返回false。
相反,我是否应该这样做(在插槽的主体中-而不是让模型成为类成员)?
QSqlTableModel *model = new QSqlTableModel(parentObject, database);发布于 2016-11-08 01:11:14
在第二种情况下,选择了哪个数据库连接?
默认数据库连接被选择.从构造函数文档,您可以看到,如果您不指定db参数,它将默认为QSqlDatabase()(这是一个空的无效QSqlDatabase对象):
如果db无效,则将使用默认数据库连接。
默认连接是在调用QSqlDatabase::addDatabase()而不指定connectionName参数时定义的。
在这一点上我需要主动连接吗?
这两种表单都要求模型使用有效的数据库连接。有关如何使用该类的示例,您可以查看表模型示例。
通常,您必须在应用程序启动时设置数据库连接。之后,您可以在任何QSqlQuery/QSqlQueryModel/QSqlTableModel.中使用此连接。。。
相反,我是否应该这样做(在插槽的主体中-而不是让模型成为类成员)?
如果您的目标只是将参数传递给成员对象的构造函数,则不需要动态分配对象。这是一个通用的C++连接,您可以在MyClass的构造函数中传递所需的任何参数:
class MyClass {
QSqlTableModel model;
public:
MyClass(): model(this, QSqlDatabase::database("mydbconnection")){}
...这两种方法都应该起作用。选择一个而另一个不需要对select()调用失败做任何事情。就我个人而言,如果不是真正需要的话,我更愿意避免动态分配。您可以通过这个问题进行类似的比较。
model.select()返回false
以下是一些可能有助于解决问题的建议:
open()之前,检查数据库连接是否为 QSqlTableModel。model.lastError()获取有关错误的更多信息。
qDebug() << model.lastError();https://stackoverflow.com/questions/40474851
复制相似问题