LINUX.ORG.RU

[Qt] QTableView и sqlite база данных


0

1

Пытаюсь написать простую программу для работы с базой данных. Проблема в том, что таблица не отображается в QTableView. Вот пример:

main.cpp

#include <QtGui>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    mainWindow *window = new mainWindow;
    window->show();
    return app.exec();
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QWidget>
#include "ui_mainwindow.h"

class mainWindow : public QMainWindow, public Ui::mainWindow
{
    Q_OBJECT

public:
    mainWindow(QWidget *parent = 0);
};

#endif // MAINWINDOW_H

mainwindow.cpp


#include <QtGui>
#include <QtSql>
#include "mainwindow.h"
#include "adddialog.h"
#include "aboutdialog.h"
#include "connectdb.h"

mainWindow::mainWindow(QWidget *parent) : QMainWindow(parent)
{
    setupUi(this);

    connectDB();

    QSqlQuery query;
    query.exec("CREATE TABLE IF NOT EXISTS acc ("
               "addr varchar(200), "
               "log varchar(200), "
               "pass varchar(200), "
               "desc varchar(200))");

    QSqlTableModel model;
    model.setTable("acc");
    model.setEditStrategy(QSqlTableModel::OnManualSubmit);
    model.setHeaderData(0, Qt::Horizontal, QObject::tr("Address"));
    model.setHeaderData(1, Qt::Horizontal, QObject::tr("Login"));
    model.setHeaderData(2, Qt::Horizontal, QObject::tr("Password"));
    model.setHeaderData(3, Qt::Horizontal, QObject::tr("Description"));
    model.select();

    tableView->setModel(&model);

    addDialog *add = new addDialog;
    aboutDialog *about = new aboutDialog;

    QObject::connect(addButton, SIGNAL(clicked()), add, SLOT(show()));
    QObject::connect(aboutButton, SIGNAL(clicked()), about, SLOT(show()));
    QObject::connect(exitButton, SIGNAL(clicked()), this, SLOT(close()));

}

Создается база данных sqlite

connectdb.h


#ifndef CONNECTDB_H
#define CONNECTDB_H

#include <QtSql>
#include <QMessageBox>

static bool connectDB()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName( "acc.sqlite");
    if (!db.open()){
        QMessageBox::critical(0, QObject::tr("Error"), QObject::tr("Can't open database."), QMessageBox::Cancel);
        return false;
    }

    return true;
}

#endif // CONNECTDB_H

В ui_mainwindow.h описание mainwindow.ui, в котором создается QTableView *tableView. В результате запуска появляется пустая таблица даже без заголовков. Думаю проблема где-то здесь tableView->setModel(&model);

Подскажите как исправить, что бы все заработало. На простом примере, если все в одном файле вручную написать, а не через *.ui, то все верно отображается.

Если нужно, могу выложить еще ui_mainwindow.h

stormblastt ★★★ ()

select после settable поставьте


groups->setTable("db_groups");
...

groups->select();

...
ui->tableView->setModel(groups); 

... groups->setHeaderData(groups->fieldIndex("id"),Qt::Horizontal,tr("#"));

guilder ()
Ответ на: комментарий от guilder
QSqlTableModel *model =new QSqlTableModel;
    model->setTable("acc");
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    model->setHeaderData(0, Qt::Horizontal, QObject::tr("Address"));
    model->setHeaderData(1, Qt::Horizontal, QObject::tr("Login"));
    model->setHeaderData(2, Qt::Horizontal, QObject::tr("Password"));
    model->setHeaderData(3, Qt::Horizontal, QObject::tr("Description"));
    model->select();

    tableView->setModel(model);

Так заработало, спасибо.

stormblastt ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.