Изучаю Qt, вот застопорился, прошу помощи)
anec.h
Раскрывающийся текст
#ifndef ANEC_H
#define ANEC_H
#include <QMainWindow>
namespace Ui {
class anec;
}
class QSqlDatabase;
class QSqlTableModel;
class QTableView;
class anec : public QMainWindow
{
Q_OBJECT
QSqlDatabase *dbase;
QSqlTableModel *tModel;
QSqlTableModel *lModel;
public:
explicit anec(QWidget *parent = 0);
~anec();
private:
Ui::anec *ui;
bool ConnectDB();
};
#endif // ANEC_H
anec.cpp
Раскрывающийся текст
#include "anec.h"
#include "ui_anec.h"
#include <QtGui>
#include <QtSql>
anec::anec(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::anec)
{
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
ui->setupUi(this);
ConnectDB();
}
anec::~anec()
{
delete ui;
}
bool anec::ConnectDB()
{
dbase = new QSqlDatabase;
*dbase = QSqlDatabase::addDatabase("QSQLITE");
dbase->setHostName("anecdot");
dbase->setDatabaseName("d:\\Code\\DB\\anecdb.sqlite");
if(!dbase->open()){
QMessageBox::critical(0, QObject::tr("Ошибка базы данных"), dbase->lastError().text());
exit(1);}
tModel = new QSqlTableModel(this);
tModel->setTable("anec");
tModel->select();
tModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
tModel->setSort(0, Qt::AscendingOrder);
ui->tableView->setModel(tModel);
ui->tableView->setColumnHidden(tModel->fieldIndex("id"), true);
ui->tableView->setColumnHidden(tModel->fieldIndex("id_group"), true);
ui->tableView->setColumnHidden(tModel->fieldIndex("rating"), true);
ui->tableView->setColumnHidden(tModel->fieldIndex("id_source"), true);
ui->tableView->setColumnHidden(tModel->fieldIndex("date_add"), true);
//ui->tableView->horizontalHeader()->hide();
ui->tableView->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
ui->tableView->show();
lModel = new QSqlTableModel(this);
lModel->setTable("group");
lModel->select();
lModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
lModel->setSort(0, Qt::AscendingOrder);
ui->listView->setModel(lModel);
ui->listView->setModelColumn(1);
}
main.cpp
Раскрывающийся текст
#include <QtGui/QApplication>
#include "anec.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
anec w;
w.show();
return a.exec();
}
В tableView все выводится, а вот в listView - ничего не выводить) Что я не так делаю?
Еще заметил, если
dbase = new QSqlDatabase;
*dbase = QSqlDatabase::addDatabase("QSQLITE");
dbase->setHostName("anecdot");
dbase->setDatabaseName("d:\\Code\\DB\\anecdb.sqlite");
if(!dbase->open()){
QMessageBox::critical(0, QObject::tr("Ошибка базы данных"), dbase->lastError().text());
exit(1);}
вынести в отдельную функцию, то дальнейший код с моделью не работает, т.е. он отрабатывает но в tableView ничего не выводится! Т.е. предположим что я вынес коннект к базе в функцию bool Connect(), а работа с моделью в void modTable(), пишу следующее:
if (!Connect()){
/*какое-то сообщение*/
exit(1);
}
modTable();
По идее должно работать, но tableView остается пустым.
Пытался вывести qDebug()<<tModel->lastError();, но он возвращает QSqlError(-1, "", "") , т.е. то же что и при норм работе.
Соответственно если вызвать новую форму и из нее работать с базой данных надо снова коннектиться. Получается коннект надо повторять при каждом обращении к базе? он не постоянный (т.е. раз подключился при запуске приложения и работаешь пока не закроешь)?
Заранее извиняюсь за ламерские вопросы. Но я чего-то не понимаю, в этой жизне)