class EditableSqlModel : public QSqlQueryModel
{
Q_OBJECT
public:
EditableSqlModel(QObject *parent = 0);
Qt::ItemFlags flags(const QModelIndex &index) const;
bool setData(const QModelIndex &index, const QVariant &value, int role);
private:
void refresh();
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("PostgreSQL_ip");
if (!db.open()) {
QMessageBox::critical(0, qApp->tr("Cannot open database"),
qApp->tr("Unable to establish a database connection.\n", QMessageBox::Cancel);
return -1;
EditableSqlModel editableModel;
QTableView *view = new QTableView;
view->setModel(editableModel);
view->setWindowTitle("Okno do edytowania");
view->show();
return app.exec();
}
EditableSqlModel::EditableSqlModel(QObject *parent) : QSqlQueryModel(parent)
{
refresh();
}
Qt::ItemFlags EditableSqlModel::flags(const QModelIndex &index) const
{
Qt::ItemFlags flags = QSqlQueryModel::flags(index);
if (index.column() >= 1 && index.column() <= 4) flags |= Qt::ItemIsEditable;
return flags;
}
bool EditableSqlModel::setData(const QModelIndex &index, const QVariant &value, int /* role */)
{
if (index.column() < 1 || index.column() > 4) return false;
QModelIndex primaryKeyIndex = QSqlQueryModel::index(index.row(), 0);
int pkey = data(primaryKeyIndex).toInt();
clear();
bool ok;
QSqlQuery query;
if( 1 == index.column() )
{
query.prepare("update users set parrent = ? where id = ?");
query.addBindValue(value.toInt());
query.addBindValue(pkey);
}
else
{
switch( index.column() )
{
case 2: query.prepare("update users set login = ? where id = ?"); break;
case 3: query.prepare("update users set first = ? where id = ?"); break;
case 4: query.prepare("update users set last = ? where id = ?"); break;
}
query.addBindValue(value.toString());
query.addBindValue(pkey);
}
ok = query.exec();
refresh();
return ok;
}
void EditableSqlModel::refresh()
{
setQuery("select * from users");
}
2010/03/26
QT
Właśnie skończyłem się bawić mała aplikacyjna w QT, która miała za zadanie wyświetlać dane z bazy PostgreSQL. Jestem zaskoczony jak szybko i łatwo pisze się aplikacje w QT. Po przejściach z pracą dyplomowa i .Net jestem w stanie się założyć o każde pieniądze że to co do tej pory robiłeś w .Net w QT zrobisz 2 razy szybciej. Oto dowód, kompletna aplikacja do edycji danych z poprzez ODBC w formie podobnej do arkuszu kalkulacyjnego Excel. 85 linij kodu źródłowego.
Brak komentarzy:
Prześlij komentarz