может все-таки наследуется от
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();
}