summaryrefslogtreecommitdiffstats
path: root/examples/sql
diff options
context:
space:
mode:
Diffstat (limited to 'examples/sql')
-rw-r--r--examples/sql/sqlbrowser/browser.cpp75
-rw-r--r--examples/sql/sqlbrowser/browser.h20
-rw-r--r--examples/sql/sqlbrowser/browserwidget.ui184
3 files changed, 200 insertions, 79 deletions
diff --git a/examples/sql/sqlbrowser/browser.cpp b/examples/sql/sqlbrowser/browser.cpp
index 3aa330e227..eaaec25b16 100644
--- a/examples/sql/sqlbrowser/browser.cpp
+++ b/examples/sql/sqlbrowser/browser.cpp
@@ -52,6 +52,12 @@ Browser::Browser(QWidget *parent)
table->addAction(insertRowAction);
table->addAction(deleteRowAction);
+ table->addAction(fieldStrategyAction);
+ table->addAction(rowStrategyAction);
+ table->addAction(manualStrategyAction);
+ table->addAction(submitAction);
+ table->addAction(revertAction);
+ table->addAction(selectAction);
if (QSqlDatabase::drivers().isEmpty())
QMessageBox::information(this, tr("No database drivers found"),
@@ -144,7 +150,7 @@ void Browser::addConnection()
void Browser::showTable(const QString &t)
{
- QSqlTableModel *model = new QSqlTableModel(table, connectionWidget->currentDatabase());
+ QSqlTableModel *model = new CustomModel(table, connectionWidget->currentDatabase());
model->setEditStrategy(QSqlTableModel::OnRowChange);
model->setTable(connectionWidget->currentDatabase().driver()->escapeIdentifier(t, QSqlDriver::TableName));
model->select();
@@ -215,8 +221,6 @@ void Browser::deleteRow()
if (!model)
return;
- model->setEditStrategy(QSqlTableModel::OnManualSubmit);
-
QModelIndexList currentSelection = table->selectionModel()->selectedIndexes();
for (int i = 0; i < currentSelection.count(); ++i) {
if (currentSelection.at(i).column() != 0)
@@ -224,24 +228,79 @@ void Browser::deleteRow()
model->removeRow(currentSelection.at(i).row());
}
- model->submitAll();
- model->setEditStrategy(QSqlTableModel::OnRowChange);
-
updateActions();
}
void Browser::updateActions()
{
- bool enableIns = qobject_cast<QSqlTableModel *>(table->model());
+ QSqlTableModel * tm = qobject_cast<QSqlTableModel *>(table->model());
+ bool enableIns = tm;
bool enableDel = enableIns && table->currentIndex().isValid();
insertRowAction->setEnabled(enableIns);
deleteRowAction->setEnabled(enableDel);
+
+ fieldStrategyAction->setEnabled(tm);
+ rowStrategyAction->setEnabled(tm);
+ manualStrategyAction->setEnabled(tm);
+ submitAction->setEnabled(tm);
+ revertAction->setEnabled(tm);
+ selectAction->setEnabled(tm);
+
+ if (tm) {
+ QSqlTableModel::EditStrategy es = tm->editStrategy();
+ fieldStrategyAction->setChecked(es == QSqlTableModel::OnFieldChange);
+ rowStrategyAction->setChecked(es == QSqlTableModel::OnRowChange);
+ manualStrategyAction->setChecked(es == QSqlTableModel::OnManualSubmit);
+ }
}
void Browser::about()
{
QMessageBox::about(this, tr("About"), tr("The SQL Browser demonstration "
"shows how a data browser can be used to visualize the results of SQL"
- "statements on a live database"));
+ "statements on a live database"));
+}
+
+void Browser::on_fieldStrategyAction_triggered()
+{
+ QSqlTableModel * tm = qobject_cast<QSqlTableModel *>(table->model());
+ if (tm)
+ tm->setEditStrategy(QSqlTableModel::OnFieldChange);
+}
+
+void Browser::on_rowStrategyAction_triggered()
+{
+ QSqlTableModel * tm = qobject_cast<QSqlTableModel *>(table->model());
+ if (tm)
+ tm->setEditStrategy(QSqlTableModel::OnRowChange);
+}
+
+void Browser::on_manualStrategyAction_triggered()
+{
+ QSqlTableModel * tm = qobject_cast<QSqlTableModel *>(table->model());
+ if (tm)
+ tm->setEditStrategy(QSqlTableModel::OnManualSubmit);
+}
+
+void Browser::on_submitAction_triggered()
+{
+ QSqlTableModel * tm = qobject_cast<QSqlTableModel *>(table->model());
+ if (tm)
+ tm->submitAll();
+}
+
+void Browser::on_revertAction_triggered()
+{
+ QSqlTableModel * tm = qobject_cast<QSqlTableModel *>(table->model());
+ if (tm)
+ tm->revertAll();
+}
+
+void Browser::on_selectAction_triggered()
+{
+ QSqlTableModel * tm = qobject_cast<QSqlTableModel *>(table->model());
+ if (tm)
+ tm->select();
}
+
diff --git a/examples/sql/sqlbrowser/browser.h b/examples/sql/sqlbrowser/browser.h
index 0769812ec8..e9f45345df 100644
--- a/examples/sql/sqlbrowser/browser.h
+++ b/examples/sql/sqlbrowser/browser.h
@@ -43,6 +43,7 @@
#define BROWSER_H
#include <QWidget>
+#include <QSqlTableModel>
#include "ui_browserwidget.h"
class ConnectionWidget;
@@ -77,6 +78,12 @@ public slots:
{ insertRow(); }
void on_deleteRowAction_triggered()
{ deleteRow(); }
+ void on_fieldStrategyAction_triggered();
+ void on_rowStrategyAction_triggered();
+ void on_manualStrategyAction_triggered();
+ void on_submitAction_triggered();
+ void on_revertAction_triggered();
+ void on_selectAction_triggered();
void on_connectionWidget_tableActivated(const QString &table)
{ showTable(table); }
void on_connectionWidget_metaDataRequested(const QString &table)
@@ -96,4 +103,17 @@ signals:
void statusMessage(const QString &message);
};
+class CustomModel: public QSqlTableModel
+{
+ Q_OBJECT
+public:
+ CustomModel(QObject *parent = 0, QSqlDatabase db = QSqlDatabase()):QSqlTableModel(parent, db) {}
+ QVariant data(const QModelIndex &idx, int role) const
+ {
+ if (role == Qt::BackgroundRole && isDirty(idx))
+ return QBrush(QColor(Qt::yellow));
+ return QSqlTableModel::data(idx, role);
+ }
+};
+
#endif
diff --git a/examples/sql/sqlbrowser/browserwidget.ui b/examples/sql/sqlbrowser/browserwidget.ui
index 20946f0ede..ff65b1f199 100644
--- a/examples/sql/sqlbrowser/browserwidget.ui
+++ b/examples/sql/sqlbrowser/browserwidget.ui
@@ -1,10 +1,8 @@
-<ui version="4.0" >
- <author></author>
- <comment></comment>
- <exportmacro></exportmacro>
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
<class>Browser</class>
- <widget class="QWidget" name="Browser" >
- <property name="geometry" >
+ <widget class="QWidget" name="Browser">
+ <property name="geometry">
<rect>
<x>0</x>
<y>0</y>
@@ -12,100 +10,90 @@
<height>515</height>
</rect>
</property>
- <property name="windowTitle" >
+ <property name="windowTitle">
<string>Qt SQL Browser</string>
</property>
- <layout class="QVBoxLayout" >
- <property name="margin" >
- <number>8</number>
- </property>
- <property name="spacing" >
+ <layout class="QVBoxLayout">
+ <property name="spacing">
<number>6</number>
</property>
+ <property name="margin">
+ <number>8</number>
+ </property>
<item>
- <widget class="QSplitter" name="splitter_2" >
- <property name="sizePolicy" >
- <sizepolicy>
- <hsizetype>7</hsizetype>
- <vsizetype>7</vsizetype>
+ <widget class="QSplitter" name="splitter_2">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="orientation" >
+ <property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
- <widget class="ConnectionWidget" name="connectionWidget" >
- <property name="sizePolicy" >
- <sizepolicy>
- <hsizetype>13</hsizetype>
- <vsizetype>7</vsizetype>
+ <widget class="ConnectionWidget" name="connectionWidget">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Ignored" vsizetype="Expanding">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
- <widget class="QTableView" name="table" >
- <property name="sizePolicy" >
- <sizepolicy>
- <hsizetype>7</hsizetype>
- <vsizetype>7</vsizetype>
+ <widget class="QTableView" name="table">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>2</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="contextMenuPolicy" >
+ <property name="contextMenuPolicy">
<enum>Qt::ActionsContextMenu</enum>
</property>
- <property name="selectionBehavior" >
+ <property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
</widget>
</widget>
</item>
<item>
- <widget class="QGroupBox" name="groupBox" >
- <property name="sizePolicy" >
- <sizepolicy>
- <hsizetype>5</hsizetype>
- <vsizetype>3</vsizetype>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="maximumSize" >
+ <property name="maximumSize">
<size>
<width>16777215</width>
<height>180</height>
</size>
</property>
- <property name="title" >
+ <property name="title">
<string>SQL Query</string>
</property>
- <layout class="QVBoxLayout" >
- <property name="margin" >
- <number>9</number>
- </property>
- <property name="spacing" >
+ <layout class="QVBoxLayout">
+ <property name="spacing">
<number>6</number>
</property>
+ <property name="margin">
+ <number>9</number>
+ </property>
<item>
- <widget class="QTextEdit" name="sqlEdit" >
- <property name="sizePolicy" >
- <sizepolicy>
- <hsizetype>7</hsizetype>
- <vsizetype>3</vsizetype>
+ <widget class="QTextEdit" name="sqlEdit">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="minimumSize" >
+ <property name="minimumSize">
<size>
<width>0</width>
<height>18</height>
</size>
</property>
- <property name="baseSize" >
+ <property name="baseSize">
<size>
<width>0</width>
<height>120</height>
@@ -114,19 +102,19 @@
</widget>
</item>
<item>
- <layout class="QHBoxLayout" >
- <property name="margin" >
- <number>1</number>
- </property>
- <property name="spacing" >
+ <layout class="QHBoxLayout">
+ <property name="spacing">
<number>6</number>
</property>
+ <property name="margin">
+ <number>1</number>
+ </property>
<item>
<spacer>
- <property name="orientation" >
+ <property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
- <property name="sizeHint" >
+ <property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
@@ -135,15 +123,15 @@
</spacer>
</item>
<item>
- <widget class="QPushButton" name="clearButton" >
- <property name="text" >
+ <widget class="QPushButton" name="clearButton">
+ <property name="text">
<string>&amp;Clear</string>
</property>
</widget>
</item>
<item>
- <widget class="QPushButton" name="submitButton" >
- <property name="text" >
+ <widget class="QPushButton" name="submitButton">
+ <property name="text">
<string>&amp;Submit</string>
</property>
</widget>
@@ -154,37 +142,91 @@
</widget>
</item>
</layout>
- <action name="insertRowAction" >
- <property name="enabled" >
+ <action name="insertRowAction">
+ <property name="enabled">
<bool>false</bool>
</property>
- <property name="text" >
+ <property name="text">
<string>&amp;Insert Row</string>
</property>
- <property name="statusTip" >
+ <property name="statusTip">
<string>Inserts a new Row</string>
</property>
</action>
- <action name="deleteRowAction" >
- <property name="enabled" >
+ <action name="deleteRowAction">
+ <property name="enabled">
<bool>false</bool>
</property>
- <property name="text" >
+ <property name="text">
<string>&amp;Delete Row</string>
</property>
- <property name="statusTip" >
+ <property name="statusTip">
<string>Deletes the current Row</string>
</property>
</action>
+ <action name="fieldStrategyAction">
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Submit on &amp;Field Change</string>
+ </property>
+ <property name="toolTip">
+ <string>Commit on Field Change</string>
+ </property>
+ </action>
+ <action name="rowStrategyAction">
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Submit on &amp;Row Change</string>
+ </property>
+ <property name="toolTip">
+ <string>Commit on Row Change</string>
+ </property>
+ </action>
+ <action name="manualStrategyAction">
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Submit &amp;Manually</string>
+ </property>
+ <property name="toolTip">
+ <string>Commit Manually</string>
+ </property>
+ </action>
+ <action name="submitAction">
+ <property name="text">
+ <string>&amp;Submit All</string>
+ </property>
+ <property name="toolTip">
+ <string>Submit Changes</string>
+ </property>
+ </action>
+ <action name="revertAction">
+ <property name="text">
+ <string>&amp;Revert All</string>
+ </property>
+ <property name="toolTip">
+ <string>Revert</string>
+ </property>
+ </action>
+ <action name="selectAction">
+ <property name="text">
+ <string>S&amp;elect</string>
+ </property>
+ <property name="toolTip">
+ <string>Refresh Data from Database</string>
+ </property>
+ </action>
</widget>
- <pixmapfunction></pixmapfunction>
<customwidgets>
<customwidget>
<class>ConnectionWidget</class>
<extends>QTreeView</extends>
<header>connectionwidget.h</header>
- <container>0</container>
- <pixmap></pixmap>
</customwidget>
</customwidgets>
<tabstops>