首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有QSqlQueryModel的空QComboBox

具有QSqlQueryModel的空QComboBox
EN

Stack Overflow用户
提问于 2015-05-06 13:29:09
回答 1查看 598关注 0票数 2

我对Qt完全是个新手,只是想稍微玩玩一下。我想尝试用DB中的值填充ComboBox

我得到了以下代码:

代码语言:javascript
复制
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,对应于我的DB,但是user_name没有显示在组合框中。

谁能给我指出错误所在?

EN

回答 1

Stack Overflow用户

发布于 2015-05-09 18:32:33

我不能重现你的问题。我有一个非常简单的继承自QComboBox的类。我使用的是sqlite数据库,但除此之外,大多数行与您的示例几乎完全相同,并且它正确地显示了数据库中的一个条目。

如果将代码中的DB替换为您的DB,是否可以正确显示条目?

combox.h

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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();

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30068245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档