Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/12: Рейтинг темы: голосов - 12, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 05.06.2012
Сообщений: 27
1

tableview, ui и QSqlQueryModel

01.04.2013, 19:02. Показов 2413. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
я в qt нуб.

подскажите в чем причина. форум перерыл, но не нашел почему не работает

qt creator

форма создана в нем. поставил виджет tableView на форму
пытаюсь открыть таблицу из базы SqLite

ошибок при компиляции и линковке не выдает но на форме виджет таблицы пустой. файл базы лежит там же откуда запускается eхе


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <QtSql>
#include <QMainWindow>
#include <QWidget>
#include <QtGui>
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
 
 
ui->setupUi(this);
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("db");
db.open();
QSqlQueryModel model;
model.setQuery("select * from obrec");
ui->tv->setModel(&model);
ui->tv->show();
 
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.04.2013, 19:02
Ответы с готовыми решениями:

Редактирование данных через QSqlQueryModel+tableView
Все добра! Необходимо отобразить в tableview и редактировать данные из нескольких таблиц. Как...

QSqlQueryModel::insertColumns
извините за глупый наверное вопрос, но для перестраховки хочу спросить. Дынный метод не добавит...

QSqlQueryModel и QML
Не удается отобразить данные в qml приложении, при этом сами данные из БД извлекаются. Привожу код...

QSqlQueryModel + QTableView + QDateTime
В табличке, в столбце с датой, отображается 17.06.15 11:18. Хотя, вывод qDebug() &lt;&lt;...

10
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
02.04.2013, 07:21 2
Ты модель создал в конструкторе....как конструктор выполнится, так твоя модель будет уничтожена....
Так что причем здесь Qt? это в С++ у тебя косяк......

Выделяй память под QSqlQueryModel динамически и все должно заработать, если конечно база не пустая и реально открылась....
0
3 / 3 / 1
Регистрация: 17.08.2012
Сообщений: 145
02.04.2013, 10:13 3
Цитата Сообщение от hoja Посмотреть сообщение
C++
1
2
3
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("db");
}
указывай полный путь к бд. Несмотря на то что результат db.open(); true.
Сама на этом попалась когда-то.
0
0 / 0 / 0
Регистрация: 05.06.2012
Сообщений: 27
02.04.2013, 12:54  [ТС] 4
Цитата Сообщение от flerris Посмотреть сообщение
указывай полный путь к бд. Несмотря на то что результат db.open(); true.
Сама на этом попалась когда-то.
попробовал

db.setDatabaseName("C:\\prog\\db.dat");


появилось что то типа полей но данных из базы не видно

Добавлено через 5 минут
Цитата Сообщение от solar_wind Посмотреть сообщение
Ты модель создал в конструкторе....как конструктор выполнится, так твоя модель будет уничтожена....
Так что причем здесь Qt? это в С++ у тебя косяк......

Выделяй память под QSqlQueryModel динамически и все должно заработать, если конечно база не пустая и реально открылась....
база не пустая 100%.

можно поподробнее насчет выделения памяти?

я делаю в qt creator обычный проэкт с формой. есть всего два файла main.cpp и mainwindow.cpp (+файл формы). на форму ставлю tableview.


код выше - из mainwindow.cpp
предлагаете в main.cpp вставлять подключение к базе и работу в виджетом?
0
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
02.04.2013, 13:05 5
hoja, В mainwindow.h (он у тебя подключен если что) пишешь:
C++ (Qt)
1
QSqlQueryModel model;
в mainwindow.cpp соответственно эту строку убираешь

Добавлено через 1 минуту
Это был простейший, не динамический вариант, но должен работать.
0
3 / 3 / 1
Регистрация: 17.08.2012
Сообщений: 145
02.04.2013, 13:15 6
hoja,
вот как сделано у меня и этот код рабочий

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
подключение там в отельной функции у меня
а селект такой
 
  enum{
    alias_code=1,
   };
    dialog=new QDialog;
    QSqlTableModel* tableModel=new QSqlTableModel(this);
    tableModel->setTable("epsg_alias");    
    
    tableModel->select();
 
    QTableView* tableview;
    tableview=new QTableView;
    tableview->setModel(tableModel);
    tableview->setColumnHidden(1,true);//скрывает ненужные столбцы    
    grid->addWidget(tableview,0,0);
    dialog->setLayout(grid);
    dialog->exec();
0
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
02.04.2013, 13:18 7
flerris, Это будет работать, но так делать не правильно.
Указатель tableModel после выхода из функции теряется и я так понимаю вы его потом не удаляете....
0
3 / 3 / 1
Регистрация: 17.08.2012
Сообщений: 145
02.04.2013, 13:21 8
Цитата Сообщение от solar_wind Посмотреть сообщение
flerris, Это будет работать, но так делать не правильно.
Указатель tableModel после выхода из функции теряется и я так понимаю вы его потом не удаляете....
я только сейчас это пишу. Он на кнопку cancel и на кнопку закрытия будет удаляться. Ещё коннект не подключила
0
0 / 0 / 0
Регистрация: 05.06.2012
Сообщений: 27
02.04.2013, 13:23  [ТС] 9
Цитата Сообщение от flerris Посмотреть сообщение
hoja,
вот как сделано у меня и этот код рабочий
насколько я понял из прочитанного в Tablemodel есть существенный недостаток - не работают sql запросы к базе.
т.е. я не смогу выбрать select Nazv from obrec order by Nazv к примеру


поэтому меня интересует именно QueryModel
0
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
02.04.2013, 13:24 10
flerris, Так что бы удалять нужно сам указатель сохранить куда то, а так он у вас при выходе из функции удалится, но объект модели конечно останется в динамической памяти.
0
3 / 3 / 1
Регистрация: 17.08.2012
Сообщений: 145
02.04.2013, 13:35 11
Цитата Сообщение от solar_wind Посмотреть сообщение
flerris, Так что бы удалять нужно сам указатель сохранить куда то, а так он у вас при выходе из функции удалится, но объект модели конечно останется в динамической памяти.
на форме кнопка, на неё нажимаю,появляется диалог уже с селектом, пользователь берёт нужные ему данные, вставляет в строку и потом закрывает этот диалог, все указатели удаляются. Зачем сохранять указатель?
0
02.04.2013, 13:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.04.2013, 13:35
Помогаю со студенческими работами здесь

Spin Box and QsqlQueryModel
Всем день добрый! Подскажите кто знает, можно ли в модель QsqlQueryModel отображаемую в TableView,...

Как соединить QSqlQueryModel с QTableView?
Привет всем. У меня 1 вопрос, как можно соеденить QSqlQueryModel с QTableView? питаюс так: ...

Пустые ряды в QTableView + QSqlQueryModel
Вывожу в QTableView результаты SQL-запроса таким образом (схематически): QSqlQuery...

Как сделать checkbox в QTableView с QSqlQueryModel?
Создал модель, наследуемую от QSqlQueryModel и делегата для QTableView. Checkbox не переключается....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru