使用QSqlQueryModel清空QComboBox

时间:2015-05-06 05:29:09

标签: sql qt qcombobox

我对Qt全新,只是想玩一下。我想尝试使用DB中的值填充ComboBox

我有以下代码:

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setHostName("LOCALHOST");
db.setDatabaseName("rms32");
if(db.open())
{
    QSqlQuery query;
    query.prepare("select user_name from T_USER");
    if(query.exec())
    {
        this->model = new QSqlQueryModel();
        this->model->setQuery(query);
        qDebug() << this->model->rowCount();
        qDebug() << this->model->columnCount();

        ui->_UsernameCB->setModel(this->model);
        //ui->_UsernameCB->setModelColumn(0);

        qDebug() << "Last error: " << db.lastError().text();
        qDebug() << "Connection opened successfully";
    }
    db.close();
}

rowCountcolCount给我1,对应于我的数据库,但user_name未显示在Combobox中。

有人能指出我的错误吗?

1 个答案:

答案 0 :(得分:0)

我无法重现你的问题。我有一个非常简单的类,继承自QComboBox。我去了一个sqlite数据库,但是大多数行都与你的情况完全一样,它正确显示了数据库中的一个条目。

如果用您的代码替换代码中的数据库,是否正确显示了该条目?

<强> combobox.h

#ifndef MYCOMBOBOX_H
#define MYCOMBOBOX_H

#include <QComboBox>

QT_FORWARD_DECLARE_CLASS(QSqlQueryModel);

class ComboBox : public QComboBox
{
 public:
  ComboBox(QWidget *widget = 0);
  QSqlQueryModel *model;
};

#endif

<强> combobox.cpp

#include "combobox.h"

#include <QSqlDatabase>
#include <QSqlQueryModel>
#include <QSqlQuery>

ComboBox::ComboBox(QWidget *parent) :
  QComboBox(parent)
{
   QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
   db.setDatabaseName("db.db");
   if(db.open())
     {
       QSqlQuery query;
       query.prepare("select * from TEST");
       if(query.exec())
        {
          this->model = new QSqlQueryModel;
          this->model->setQuery(query);
          this->setModel(this->model);
        }
       db.close();
     }
}

<强>的main.cpp

#include <QApplication>
#include <QDialog>
#include <QHBoxLayout>

#include "combobox.h"

int main(int argc, char** argv)
{
  QApplication app(argc,argv);

  QDialog dialog;
  ComboBox box;

  QHBoxLayout layout;
  layout.addWidget(&box);

  dialog.setLayout(&layout);
  dialog.show();

  return app.exec();

}