我对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();
}
rowCount
和colCount
给我1,对应于我的数据库,但user_name
未显示在Combobox中。
有人能指出我的错误吗?
答案 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();
}