Qt - 如何将comboBox连接到数据库

时间:2016-07-02 00:37:29

标签: c++ qt combobox

我正在尝试查询数据库并将结果放在组合框中。

  • db最初被宣布为公开,但lastError()在检查openConnection()的{​​{1}}函数中返回 “未加载驱动程序” 。该函数对于win7返回true,但对于win8和XP则返回false。
  • 不确定为什么会这样。一些论坛评论建议“在创建对象时将头部中的变量声明为全局会将其留给编译器.... db对象在错误的时间实例化”。

  • 来自主窗口的连接调用是if(!db.open())

  • 然后db用于组合框的行:QsqlDatabase db = dbConnector::getInstance()->db;

而不是声明db public:

  • 我创建了QSqlQuery* qry=new QSqlQuery(db);,因为我不认为主窗口可以访问db。 (db被声明为私有)
  • 当前代码返回“ ui未在此范围内声明

在此示例中,如何将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();
};

0 个答案:

没有答案