我正在尝试查询数据库并将结果放在组合框中。
lastError()
在检查openConnection()
的{{1}}函数中返回 “未加载驱动程序” 。该函数对于win7返回true,但对于win8和XP则返回false。不确定为什么会这样。一些论坛评论建议“在创建对象时将头部中的变量声明为全局会将其留给编译器.... db对象在错误的时间实例化”。
来自主窗口的连接调用是if(!db.open())
QsqlDatabase db = dbConnector::getInstance()->db;
而不是声明db public:
QSqlQuery* qry=new QSqlQuery(db);
,因为我不认为主窗口可以访问db。 (db被声明为私有) 在此示例中,如何将comboBox连接到数据库?
mainwindow.cpp
comboBoxInit()
dbConnector.h
#include "dbConnector.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
dbConnector *dbc = dbConnector::getInstance();
if(!dbc->openConnection()) {
ui->statusBar->showMessage("Failed to open the database");
} else {
ui->statusBar->showMessage("Connected");
}
dbConnector::getInstance()->comboBoxInit();
//QSqlQueryModel * modal=new QSqlQueryModel();
//QSqlQuery* qry=new QSqlQuery(db);
//qry->prepare("select name from table");
//qry->exec();
modal->setQuery(*qry);
ui->comboBox->setModel(modal);
ui->comboBox_2->setModel(modal);
}
dbConnector.cpp
class dbConnector
{
private:
static dbConnector * _instance;
dbConnector();
QSqlDatabase db;
public:
static dbConnector * getInstance();
bool openConnection();
bool closeConnection();
bool comboBoxInit();
~dbConnector();
};