#include <browser.h>
Inheritance diagram for Browser:


Definition at line 36 of file browser.h.
Public Slots | |
| void | exec () |
| void | showTable (const QString &table) |
| void | showMetaData (const QString &table) |
| void | addConnection () |
| void | currentChanged () |
| void | on_insertRowAction_triggered () |
| void | on_deleteRowAction_triggered () |
| void | on_connectionWidget_tableActivated (const QString &table) |
| void | on_connectionWidget_metaDataRequested (const QString &table) |
| void | on_submitButton_clicked () |
| void | on_clearButton_clicked () |
Signals | |
| void | statusMessage (const QString &message) |
Public Member Functions | |
| Browser (QWidget *parent=0) | |
| virtual | ~Browser () |
| QSqlError | addConnection (const QString &driver, const QString &dbName, const QString &host, const QString &user, const QString &passwd, int port=-1) |
| void | insertRow () |
| void | deleteRow () |
| void | updateActions () |
| Browser::Browser | ( | QWidget * | parent = 0 |
) |
Definition at line 30 of file browser.cpp.
References QSqlDatabase::drivers(), emit, QMessageBox::information(), isEmpty(), and statusMessage().
00031 : QWidget(parent) 00032 { 00033 setupUi(this); 00034 00035 table->addAction(insertRowAction); 00036 table->addAction(deleteRowAction); 00037 00038 if (QSqlDatabase::drivers().isEmpty()) 00039 QMessageBox::information(this, tr("No database drivers found"), 00040 tr("This demo requires at least one Qt database driver. " 00041 "Please check the documentation how to build the " 00042 "Qt SQL plugins.")); 00043 00044 emit statusMessage(tr("Ready.")); 00045 }
Here is the call graph for this function:

| Browser::~Browser | ( | ) | [virtual] |
| QSqlError Browser::addConnection | ( | const QString & | driver, | |
| const QString & | dbName, | |||
| const QString & | host, | |||
| const QString & | user, | |||
| const QString & | passwd, | |||
| int | port = -1 | |||
| ) |
Definition at line 68 of file browser.cpp.
References QSqlDatabase::addDatabase(), QSqlDatabase::lastError(), QSqlDatabase::open(), QSqlDatabase::removeDatabase(), QSqlDatabase::setDatabaseName(), QSqlDatabase::setHostName(), and QSqlDatabase::setPort().
Referenced by addConnectionsFromCommandline().
00070 { 00071 static int cCount = 0; 00072 00073 QSqlError err; 00074 QSqlDatabase db = QSqlDatabase::addDatabase(driver, QString("Browser%1").arg(++cCount)); 00075 db.setDatabaseName(dbName); 00076 db.setHostName(host); 00077 db.setPort(port); 00078 if (!db.open(user, passwd)) { 00079 err = db.lastError(); 00080 db = QSqlDatabase(); 00081 QSqlDatabase::removeDatabase(QString("Browser%1").arg(cCount)); 00082 } 00083 connectionWidget->refresh(); 00084 00085 return err; 00086 }
Here is the call graph for this function:

| void Browser::insertRow | ( | ) |
Definition at line 180 of file browser.cpp.
References QAbstractTableModel::index(), QAbstractItemModel::insertRow(), QModelIndex::row(), and row.
Referenced by on_insertRowAction_triggered().
00181 { 00182 QSqlTableModel *model = qobject_cast<QSqlTableModel *>(table->model()); 00183 if (!model) 00184 return; 00185 00186 QModelIndex insertIndex = table->currentIndex(); 00187 int row = insertIndex.row() == -1 ? 0 : insertIndex.row(); 00188 model->insertRow(row); 00189 insertIndex = model->index(row, 0); 00190 table->setCurrentIndex(insertIndex); 00191 table->edit(insertIndex); 00192 }
Here is the call graph for this function:

| void Browser::deleteRow | ( | ) |
Definition at line 194 of file browser.cpp.
References QList< T >::at(), QList< T >::count(), i, QSqlTableModel::OnManualSubmit, QSqlTableModel::OnRowChange, QAbstractItemModel::removeRow(), QSqlTableModel::setEditStrategy(), QSqlTableModel::submitAll(), and updateActions().
Referenced by on_deleteRowAction_triggered().
00195 { 00196 QSqlTableModel *model = qobject_cast<QSqlTableModel *>(table->model()); 00197 if (!model) 00198 return; 00199 00200 model->setEditStrategy(QSqlTableModel::OnManualSubmit); 00201 00202 QModelIndexList currentSelection = table->selectionModel()->selectedIndexes(); 00203 for (int i = 0; i < currentSelection.count(); ++i) { 00204 if (currentSelection.at(i).column() != 0) 00205 continue; 00206 model->removeRow(currentSelection.at(i).row()); 00207 } 00208 00209 model->submitAll(); 00210 model->setEditStrategy(QSqlTableModel::OnRowChange); 00211 00212 updateActions(); 00213 }
Here is the call graph for this function:

| void Browser::updateActions | ( | ) |
Definition at line 215 of file browser.cpp.
Referenced by currentChanged(), deleteRow(), exec(), showMetaData(), and showTable().
00216 { 00217 bool enableIns = qobject_cast<QSqlTableModel *>(table->model()); 00218 bool enableDel = enableIns && table->currentIndex().isValid(); 00219 00220 insertRowAction->setEnabled(enableIns); 00221 deleteRowAction->setEnabled(enableDel); 00222 }
| void Browser::exec | ( | ) | [slot] |
Definition at line 51 of file browser.cpp.
References emit, QSqlQuery::isSelect(), QSqlQueryModel::lastError(), QSqlError::NoError, QSqlQuery::numRowsAffected(), QSqlQueryModel::query(), QSqlQueryModel::setQuery(), statusMessage(), QSqlError::text(), QSqlError::type(), and updateActions().
Referenced by on_submitButton_clicked().
00052 { 00053 QSqlQueryModel *model = new QSqlQueryModel(table); 00054 model->setQuery(QSqlQuery(sqlEdit->toPlainText(), connectionWidget->currentDatabase())); 00055 table->setModel(model); 00056 00057 if (model->lastError().type() != QSqlError::NoError) 00058 emit statusMessage(model->lastError().text()); 00059 else if (model->query().isSelect()) 00060 emit statusMessage(tr("Query OK.")); 00061 else 00062 emit statusMessage(tr("Query OK, number of affected rows: %1").arg( 00063 model->query().numRowsAffected())); 00064 00065 updateActions(); 00066 }
| void Browser::showTable | ( | const QString & | table | ) | [slot] |
Definition at line 127 of file browser.cpp.
References QObject::connect(), currentChanged(), QAbstractItemView::DoubleClicked, QAbstractItemView::EditKeyPressed, emit, QSqlQueryModel::lastError(), QSqlError::NoError, QSqlTableModel::OnRowChange, QSqlTableModel::select(), QSqlTableModel::setEditStrategy(), QSqlTableModel::setTable(), SIGNAL, SLOT, statusMessage(), t, QSqlError::text(), QSqlError::type(), and updateActions().
Referenced by on_connectionWidget_tableActivated().
00128 { 00129 QSqlTableModel *model = new QSqlTableModel(table, connectionWidget->currentDatabase()); 00130 model->setEditStrategy(QSqlTableModel::OnRowChange); 00131 model->setTable(t); 00132 model->select(); 00133 if (model->lastError().type() != QSqlError::NoError) 00134 emit statusMessage(model->lastError().text()); 00135 table->setModel(model); 00136 table->setEditTriggers(QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed); 00137 00138 connect(table->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)), 00139 this, SLOT(currentChanged())); 00140 updateActions(); 00141 }
| void Browser::showMetaData | ( | const QString & | table | ) | [slot] |
Definition at line 143 of file browser.cpp.
References QSqlRecord::count(), QSqlRecord::field(), Qt::Horizontal, i, QStandardItemModel::index(), QStandardItemModel::insertColumns(), QStandardItemModel::insertRows(), QAbstractItemView::NoEditTriggers, QStandardItemModel::setData(), QStandardItemModel::setHeaderData(), t, QVariant::typeToName(), and updateActions().
Referenced by on_connectionWidget_metaDataRequested().
00144 { 00145 QSqlRecord rec = connectionWidget->currentDatabase().record(t); 00146 QStandardItemModel *model = new QStandardItemModel(table); 00147 00148 model->insertRows(0, rec.count()); 00149 model->insertColumns(0, 7); 00150 00151 model->setHeaderData(0, Qt::Horizontal, "Fieldname"); 00152 model->setHeaderData(1, Qt::Horizontal, "Type"); 00153 model->setHeaderData(2, Qt::Horizontal, "Length"); 00154 model->setHeaderData(3, Qt::Horizontal, "Precision"); 00155 model->setHeaderData(4, Qt::Horizontal, "Required"); 00156 model->setHeaderData(5, Qt::Horizontal, "AutoValue"); 00157 model->setHeaderData(6, Qt::Horizontal, "DefaultValue"); 00158 00159 00160 for (int i = 0; i < rec.count(); ++i) { 00161 QSqlField fld = rec.field(i); 00162 model->setData(model->index(i, 0), fld.name()); 00163 model->setData(model->index(i, 1), fld.typeID() == -1 00164 ? QString(QVariant::typeToName(fld.type())) 00165 : QString("%1 (%2)").arg(QVariant::typeToName(fld.type())).arg(fld.typeID())); 00166 model->setData(model->index(i, 2), fld.length()); 00167 model->setData(model->index(i, 3), fld.precision()); 00168 model->setData(model->index(i, 4), fld.requiredStatus() == -1 ? QVariant("?") 00169 : QVariant(bool(fld.requiredStatus()))); 00170 model->setData(model->index(i, 5), fld.isAutoValue()); 00171 model->setData(model->index(i, 6), fld.defaultValue()); 00172 } 00173 00174 table->setModel(model); 00175 table->setEditTriggers(QAbstractItemView::NoEditTriggers); 00176 00177 updateActions(); 00178 }
| void Browser::addConnection | ( | ) | [slot] |
Definition at line 88 of file browser.cpp.
References QDialog::Accepted, QSqlDatabase::addDatabase(), QSqlDatabase::close(), QSqlDatabase::database(), QSqlConnectionDialog::databaseName(), QSqlConnectionDialog::driverName(), QSqlQuery::exec(), QDialog::exec(), QSqlConnectionDialog::hostName(), QSqlDatabase::lastError(), QSqlError::NoError, QSqlDatabase::open(), QSqlConnectionDialog::password(), QSqlConnectionDialog::port(), QSqlDatabase::removeDatabase(), QSqlDatabase::setDatabaseName(), QSqlError::text(), QSqlError::type(), QSqlConnectionDialog::useInMemoryDatabase(), QSqlConnectionDialog::userName(), and QMessageBox::warning().
00089 { 00090 QSqlConnectionDialog dialog(this); 00091 if (dialog.exec() != QDialog::Accepted) 00092 return; 00093 00094 if (dialog.useInMemoryDatabase()) { 00095 QSqlDatabase::database("in_mem_db", false).close(); 00096 QSqlDatabase::removeDatabase("in_mem_db"); 00097 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "in_mem_db"); 00098 db.setDatabaseName(":memory:"); 00099 if (!db.open()) 00100 QMessageBox::warning(this, tr("Unable to open database"), tr("An error occured while " 00101 "opening the connection: ") + db.lastError().text()); 00102 QSqlQuery q("", db); 00103 q.exec("drop table Movies"); 00104 q.exec("drop table Names"); 00105 q.exec("create table Movies (id integer primary key, Title varchar, Director varchar, Rating number)"); 00106 q.exec("insert into Movies values (0, 'Metropolis', 'Fritz Lang', '8.4')"); 00107 q.exec("insert into Movies values (1, 'Nosferatu, eine Symphonie des Grauens', 'F.W. Murnau', '8.1')"); 00108 q.exec("insert into Movies values (2, 'Bis ans Ende der Welt', 'Wim Wenders', '6.5')"); 00109 q.exec("insert into Movies values (3, 'Hardware', 'Richard Stanley', '5.2')"); 00110 q.exec("insert into Movies values (4, 'Mitchell', 'Andrew V. McLaglen', '2.1')"); 00111 q.exec("create table Names (id integer primary key, Firstname varchar, Lastname varchar, City varchar)"); 00112 q.exec("insert into Names values (0, 'Sala', 'Palmer', 'Morristown')"); 00113 q.exec("insert into Names values (1, 'Christopher', 'Walker', 'Morristown')"); 00114 q.exec("insert into Names values (2, 'Donald', 'Duck', 'Andeby')"); 00115 q.exec("insert into Names values (3, 'Buck', 'Rogers', 'Paris')"); 00116 q.exec("insert into Names values (4, 'Sherlock', 'Holmes', 'London')"); 00117 connectionWidget->refresh(); 00118 } else { 00119 QSqlError err = addConnection(dialog.driverName(), dialog.databaseName(), dialog.hostName(), 00120 dialog.userName(), dialog.password(), dialog.port()); 00121 if (err.type() != QSqlError::NoError) 00122 QMessageBox::warning(this, tr("Unable to open database"), tr("An error occured while " 00123 "opening the connection: ") + err.text()); 00124 } 00125 }
| void Browser::currentChanged | ( | ) | [inline, slot] |
Definition at line 55 of file browser.h.
References updateActions().
Referenced by showTable().
00055 { updateActions(); }
| void Browser::on_insertRowAction_triggered | ( | ) | [inline, slot] |
| void Browser::on_deleteRowAction_triggered | ( | ) | [inline, slot] |
| void Browser::on_connectionWidget_tableActivated | ( | const QString & | table | ) | [inline, slot] |
| void Browser::on_connectionWidget_metaDataRequested | ( | const QString & | table | ) | [inline, slot] |
| void Browser::on_submitButton_clicked | ( | ) | [inline, slot] |
| void Browser::on_clearButton_clicked | ( | ) | [inline, slot] |
| void Browser::statusMessage | ( | const QString & | message | ) | [signal] |
Referenced by Browser(), exec(), and showTable().
1.5.1