C++ QSqlQueryModel抱怨我的数据库未打开

C++ QSqlQueryModel抱怨我的数据库未打开,c++,database,postgresql,qt,qtsql,C++,Database,Postgresql,Qt,Qtsql,我试图使用QSqlQueryModel从数据库中检索一些值,如下所示: QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL", "test1"); db.setHostName(Vars::strDbHost); db.setDatabaseName(Vars::strDbName); db.setPort(Vars::strDbPort); db.setUserName(Vars::strDbUsername); db.setPas

我试图使用
QSqlQueryModel
从数据库中检索一些值,如下所示:

 QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL", "test1");
 db.setHostName(Vars::strDbHost);
 db.setDatabaseName(Vars::strDbName);
 db.setPort(Vars::strDbPort);
 db.setUserName(Vars::strDbUsername);
 db.setPassword(Vars::strDbPassword);

 db.open()

 QSqlQueryModel model;
 model.setQuery(QString("SELECT * FROM users WHERE login=%2").arg(Vars::strUserLogin));
但我一直收到一个
QSqlQuery::exec:database not open
错误


这是为什么?我如何正确使用
QSqlQueryModel
检索所需的值?

您调用的
setQuery
版本错误。这仅适用于具有默认名称的db。在您的情况下,您需要调用
void QSqlQueryModel::setQuery(const QString&query,const QSqlDatabase&db)


如果(!db.open())qDebug()我没有在问题中添加它,但我确实确保数据库是打开的,并且没有返回任何错误。实际上,我也尝试过同样的方法,但是使用了一个查询,结果很好。您调用了错误版本的
setQuery
。这仅适用于具有默认名称的db。在您的情况下,您需要调用
voidsetquery(constqstring&query,constqsqldatabase&db)
Nowhere!这是我第一次尝试,我试图从文件中找出答案。阿玛特尔是对的。这是一个常见的错误。
model.setQuery(QString("SELECT * FROM users WHERE login=%2").arg(Vars::strUserLogin)
               , db);