Russian Qt Forum

Qt => Базы данных => Тема начата: zvzdpd от Март 12, 2009, 15:19



Название: Нет данных в QTableView
Отправлено: zvzdpd от Март 12, 2009, 15:19
В первом случае QTableView заполняется данными, во втором нет:

1. Проект из одного файла:
Код:
#include <QtGui>
#include <QtSql>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("at");

QSqlTableModel model;
model.setTable("cars");
model.select();

QTableView view;
view.setModel(&model);
view.show();
return a.exec();
}

2. Проект из шаблона qtcreator`a с использованием qtdesigner, часть кода(полный во вложении). Здесь виджет tableView остается полностью пустым:
Код:
Widget::Widget(QWidget *parent)
    : QWidget(parent), ui(new Ui::WidgetClass)
{
    ui->setupUi(this);

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("at");

QSqlTableModel model;
model.setTable("cars");
model.select();

ui->tableView->setModel(&model);
}
Что нужно сделать для отображения данных во 2-м случае?
winxp, qt-4.5.0, qtcreator-1.0.0


Название: Re: Нет данных в QTableView
Отправлено: BRE от Март 12, 2009, 15:22
Код:
	QSqlTableModel model;
model.setTable("cars");
model.select();

Нужно модель создавать динамически, а не на стеке:
Код
C++ (Qt)
QSqlTableModel *model = new QSqlTableModel;
model->setTable("cars");
model->select();
 


Название: Re: Нет данных в QTableView
Отправлено: zvzdpd от Март 12, 2009, 15:26
Спасибо. Что происходит когда я объявляю model в стеке? И почему тогда QSqlDatabase db объявляется статически? Когда делаю динамически, получается QSqlError(-1, "Driver not loaded", "Driver not loaded")
Код:
QSqlDatabase *db = new QSqlDatabase();
db->addDatabase("QSQLITE");
qDebug() << db->lastError();


Название: Re: Нет данных в QTableView
Отправлено: developer от Март 12, 2009, 16:12
Цитировать
Что происходит когда я объявляю model в стеке?
Когда програма заканчивает конструировать Widget твоя модель просто удаляется, поетому tableview не показывает ничего, и не крышит только из-за етого что когда ты делаеш setModel(model) ета модель еще существует.