Russian Qt Forum

Qt => Базы данных => Тема начата: crossly от Март 24, 2009, 16:51



Название: repaint tableview
Отправлено: crossly от Март 24, 2009, 16:51
привет всем.... обновляю модель.... вьюшка не перерисовывается... сворачиваю... разворачиваю... перерисовалась... где грабли... ?? (Qt-4.5.0)


Название: Re: repaint tableview
Отправлено: spirit от Март 24, 2009, 16:56
а код можно увидеть?


Название: Re: repaint tableview
Отправлено: crossly от Март 24, 2009, 17:44
а чё там смотреть ....
Код:
model->select();...


Название: Re: repaint tableview
Отправлено: spirit от Март 24, 2009, 17:46
а чё там смотреть ....
Код:
model->select();...
ну update() вызови после этого, раз смотреть не на что  ;)


Название: Re: repaint tableview
Отправлено: crossly от Март 24, 2009, 18:11
пробовал.... и update() и repaint() .... эффекта 0... пока не свернёш и развернёш.... такое чувство то вьюха не хнает что ей надо перерисоватся...


Название: Re: repaint tableview
Отправлено: spirit от Март 24, 2009, 18:15
насколько я понимаю ты юзаешь QSqlTableModel?
что тогда возвращает?
Код
C++ (Qt)
qDebug() << model->select();
 


Название: Re: repaint tableview
Отправлено: BRE от Март 24, 2009, 18:22
И еще напиши, как ты изменяешь данные в модели...
Информируешь ли при изменении данных (добавление/удаление записи) вьюшку?
Вообщем, как происходит работа с моделью.


Название: Re: repaint tableview
Отправлено: crossly от Март 25, 2009, 10:08
модель унаследована от QSqlQueryModel... изменений не происходит.... просто делаю новый селект для модели....


Название: Re: repaint tableview
Отправлено: spirit от Март 25, 2009, 10:32
может все-таки наследуется от QSqlTableModel в QSqlQueryModel нет метода select. ну да ладно.
все работает чудесно
h-file
Код
C++ (Qt)
#ifndef TEST_H
#define TEST_H
 
#include <QtGui>
#include <QtSql>
 
class MyQueryModel: public QSqlTableModel
{
public:
MyQueryModel(QObject *parent = 0) : QSqlTableModel(parent) {}
};
 
class Test : public QWidget
{
 Q_OBJECT
 public:
   Test(QWidget *parent = 0);
virtual ~Test();
 
private slots:
void updateQuery();
 
private:
QTableView *m_tv;
QPushButton *m_pbUpdateQuery;
MyQueryModel *m_model;
};
#endif
 

cpp-file
Код
C++ (Qt)
#include "test.h"
#include <QtGui>
 
Test::Test(QWidget *parent)
: QWidget(parent)
{
QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
db.setDatabaseName(...);
db.setUserName(...);
db.setPassword(...);
if (db.open()) {
m_model = new MyQueryModel();
m_model->setTable(...);
m_model->select();
 
m_tv = new QTableView();
m_tv->setModel(m_model);
 
QHBoxLayout *hbl = new QHBoxLayout(this);
hbl->addWidget(m_tv);
 
m_pbUpdateQuery = new QPushButton(tr("Update"));
hbl->addWidget(m_pbUpdateQuery);
 
connect(m_pbUpdateQuery, SIGNAL(clicked()), SLOT(updateQuery()));
}
}
 
Test::~Test()
{
const QStringList names = QSqlDatabase::connectionNames();
foreach (const QString &name, names)
QSqlDatabase::removeDatabase(name);
}
 
void Test::updateQuery()
{
if (!m_model)
return;
 
m_model->setTable(...);
m_model->select();
}
 


Название: Re: repaint tableview
Отправлено: crossly от Март 25, 2009, 11:06
sorry ... my bad... ::).... blockSignals(true).... :)


Название: Re: repaint tableview
Отправлено: spirit от Март 25, 2009, 11:07
просили же код показать  ;)