Doc: Clean up and modernize SQL example: Books
* Replace Qt4-style connects. * Reformat code to adhere to 80 column width. * Touch comments to make location and style consistent. * Rename a label in the UI form. Task-number: QTBUG-68652 Change-Id: Icc592f7b5a013d1806bc36c45057b35472b6efbb Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
This commit is contained in:
parent
d9d77e8680
commit
ce7cbcc3b6
@ -62,15 +62,21 @@ void BookDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
|
|||||||
{
|
{
|
||||||
if (index.column() != 5) {
|
if (index.column() != 5) {
|
||||||
QStyleOptionViewItem opt = option;
|
QStyleOptionViewItem opt = option;
|
||||||
opt.rect.adjust(0, 0, -1, -1); // since we draw the grid ourselves
|
// Since we draw the grid ourselves:
|
||||||
|
opt.rect.adjust(0, 0, -1, -1);
|
||||||
QSqlRelationalDelegate::paint(painter, opt, index);
|
QSqlRelationalDelegate::paint(painter, opt, index);
|
||||||
} else {
|
} else {
|
||||||
const QAbstractItemModel *model = index.model();
|
const QAbstractItemModel *model = index.model();
|
||||||
QPalette::ColorGroup cg = (option.state & QStyle::State_Enabled) ?
|
QPalette::ColorGroup cg = (option.state & QStyle::State_Enabled) ?
|
||||||
(option.state & QStyle::State_Active) ? QPalette::Normal : QPalette::Inactive : QPalette::Disabled;
|
(option.state & QStyle::State_Active) ?
|
||||||
|
QPalette::Normal :
|
||||||
|
QPalette::Inactive :
|
||||||
|
QPalette::Disabled;
|
||||||
|
|
||||||
if (option.state & QStyle::State_Selected)
|
if (option.state & QStyle::State_Selected)
|
||||||
painter->fillRect(option.rect, option.palette.color(cg, QPalette::Highlight));
|
painter->fillRect(
|
||||||
|
option.rect,
|
||||||
|
option.palette.color(cg, QPalette::Highlight));
|
||||||
|
|
||||||
int rating = model->data(index, Qt::DisplayRole).toInt();
|
int rating = model->data(index, Qt::DisplayRole).toInt();
|
||||||
int width = star.width();
|
int width = star.width();
|
||||||
@ -81,7 +87,8 @@ void BookDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
|
|||||||
painter->drawPixmap(x, y, star);
|
painter->drawPixmap(x, y, star);
|
||||||
x += width;
|
x += width;
|
||||||
}
|
}
|
||||||
drawFocus(painter, option, option.rect.adjusted(0, 0, -1, -1)); // since we draw the grid ourselves
|
// Since we draw the grid ourselves:
|
||||||
|
drawFocus(painter, option, option.rect.adjusted(0, 0, -1, -1));
|
||||||
}
|
}
|
||||||
|
|
||||||
QPen pen = painter->pen();
|
QPen pen = painter->pen();
|
||||||
@ -96,8 +103,8 @@ QSize BookDelegate::sizeHint(const QStyleOptionViewItem &option,
|
|||||||
{
|
{
|
||||||
if (index.column() == 5)
|
if (index.column() == 5)
|
||||||
return QSize(5 * star.width(), star.height()) + QSize(1, 1);
|
return QSize(5 * star.width(), star.height()) + QSize(1, 1);
|
||||||
|
// Since we draw the grid ourselves:
|
||||||
return QSqlRelationalDelegate::sizeHint(option, index) + QSize(1, 1); // since we draw the grid ourselves
|
return QSqlRelationalDelegate::sizeHint(option, index) + QSize(1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BookDelegate::editorEvent(QEvent *event, QAbstractItemModel *model,
|
bool BookDelegate::editorEvent(QEvent *event, QAbstractItemModel *model,
|
||||||
@ -112,19 +119,21 @@ bool BookDelegate::editorEvent(QEvent *event, QAbstractItemModel *model,
|
|||||||
int stars = qBound(0, int(0.7 + qreal(mouseEvent->pos().x()
|
int stars = qBound(0, int(0.7 + qreal(mouseEvent->pos().x()
|
||||||
- option.rect.x()) / star.width()), 5);
|
- option.rect.x()) / star.width()), 5);
|
||||||
model->setData(index, QVariant(stars));
|
model->setData(index, QVariant(stars));
|
||||||
return false; //so that the selection can change
|
// So that the selection can change:
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
QWidget *BookDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option,
|
QWidget *BookDelegate::createEditor(QWidget *parent,
|
||||||
|
const QStyleOptionViewItem &option,
|
||||||
const QModelIndex &index) const
|
const QModelIndex &index) const
|
||||||
{
|
{
|
||||||
if (index.column() != 4)
|
if (index.column() != 4)
|
||||||
return QSqlRelationalDelegate::createEditor(parent, option, index);
|
return QSqlRelationalDelegate::createEditor(parent, option, index);
|
||||||
|
|
||||||
// for editing the year, return a spinbox with a range from -1000 to 2100.
|
// For editing the year, return a spinbox with a range from -1000 to 2100.
|
||||||
QSpinBox *sb = new QSpinBox(parent);
|
QSpinBox *sb = new QSpinBox(parent);
|
||||||
sb->setFrame(false);
|
sb->setFrame(false);
|
||||||
sb->setMaximum(2100);
|
sb->setMaximum(2100);
|
||||||
@ -132,4 +141,3 @@ QWidget *BookDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem
|
|||||||
|
|
||||||
return sb;
|
return sb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,53 +59,61 @@ BookWindow::BookWindow()
|
|||||||
ui.setupUi(this);
|
ui.setupUi(this);
|
||||||
|
|
||||||
if (!QSqlDatabase::drivers().contains("QSQLITE"))
|
if (!QSqlDatabase::drivers().contains("QSQLITE"))
|
||||||
QMessageBox::critical(this, "Unable to load database", "This demo needs the SQLITE driver");
|
QMessageBox::critical(
|
||||||
|
this,
|
||||||
|
"Unable to load database",
|
||||||
|
"This demo needs the SQLITE driver"
|
||||||
|
);
|
||||||
|
|
||||||
// initialize the database
|
// Initialize the database:
|
||||||
QSqlError err = initDb();
|
QSqlError err = initDb();
|
||||||
if (err.type() != QSqlError::NoError) {
|
if (err.type() != QSqlError::NoError) {
|
||||||
showError(err);
|
showError(err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the data model
|
// Create the data model:
|
||||||
model = new QSqlRelationalTableModel(ui.bookTable);
|
model = new QSqlRelationalTableModel(ui.bookTable);
|
||||||
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
|
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
|
||||||
model->setTable("books");
|
model->setTable("books");
|
||||||
|
|
||||||
// Remember the indexes of the columns
|
// Remember the indexes of the columns:
|
||||||
authorIdx = model->fieldIndex("author");
|
authorIdx = model->fieldIndex("author");
|
||||||
genreIdx = model->fieldIndex("genre");
|
genreIdx = model->fieldIndex("genre");
|
||||||
|
|
||||||
// Set the relations to the other database tables
|
// Set the relations to the other database tables:
|
||||||
model->setRelation(authorIdx, QSqlRelation("authors", "id", "name"));
|
model->setRelation(authorIdx, QSqlRelation("authors", "id", "name"));
|
||||||
model->setRelation(genreIdx, QSqlRelation("genres", "id", "name"));
|
model->setRelation(genreIdx, QSqlRelation("genres", "id", "name"));
|
||||||
|
|
||||||
// Set the localized header captions
|
// Set the localized header captions:
|
||||||
model->setHeaderData(authorIdx, Qt::Horizontal, tr("Author Name"));
|
model->setHeaderData(authorIdx, Qt::Horizontal, tr("Author Name"));
|
||||||
model->setHeaderData(genreIdx, Qt::Horizontal, tr("Genre"));
|
model->setHeaderData(genreIdx, Qt::Horizontal, tr("Genre"));
|
||||||
model->setHeaderData(model->fieldIndex("title"), Qt::Horizontal, tr("Title"));
|
model->setHeaderData(model->fieldIndex("title"),
|
||||||
|
Qt::Horizontal, tr("Title"));
|
||||||
model->setHeaderData(model->fieldIndex("year"), Qt::Horizontal, tr("Year"));
|
model->setHeaderData(model->fieldIndex("year"), Qt::Horizontal, tr("Year"));
|
||||||
model->setHeaderData(model->fieldIndex("rating"), Qt::Horizontal, tr("Rating"));
|
model->setHeaderData(model->fieldIndex("rating"),
|
||||||
|
Qt::Horizontal, tr("Rating"));
|
||||||
|
|
||||||
// Populate the model
|
// Populate the model:
|
||||||
if (!model->select()) {
|
if (!model->select()) {
|
||||||
showError(model->lastError());
|
showError(model->lastError());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the model and hide the ID column
|
// Set the model and hide the ID column:
|
||||||
ui.bookTable->setModel(model);
|
ui.bookTable->setModel(model);
|
||||||
ui.bookTable->setItemDelegate(new BookDelegate(ui.bookTable));
|
ui.bookTable->setItemDelegate(new BookDelegate(ui.bookTable));
|
||||||
ui.bookTable->setColumnHidden(model->fieldIndex("id"), true);
|
ui.bookTable->setColumnHidden(model->fieldIndex("id"), true);
|
||||||
ui.bookTable->setSelectionMode(QAbstractItemView::SingleSelection);
|
ui.bookTable->setSelectionMode(QAbstractItemView::SingleSelection);
|
||||||
|
|
||||||
// Initialize the Author combo box
|
// Initialize the Author combo box:
|
||||||
ui.authorEdit->setModel(model->relationModel(authorIdx));
|
ui.authorEdit->setModel(model->relationModel(authorIdx));
|
||||||
ui.authorEdit->setModelColumn(model->relationModel(authorIdx)->fieldIndex("name"));
|
ui.authorEdit->setModelColumn(
|
||||||
|
model->relationModel(authorIdx)->fieldIndex("name"));
|
||||||
|
|
||||||
ui.genreEdit->setModel(model->relationModel(genreIdx));
|
ui.genreEdit->setModel(model->relationModel(genreIdx));
|
||||||
ui.genreEdit->setModelColumn(model->relationModel(genreIdx)->fieldIndex("name"));
|
ui.genreEdit->setModelColumn(
|
||||||
|
model->relationModel(genreIdx)->fieldIndex("name"));
|
||||||
|
|
||||||
QDataWidgetMapper *mapper = new QDataWidgetMapper(this);
|
QDataWidgetMapper *mapper = new QDataWidgetMapper(this);
|
||||||
mapper->setModel(model);
|
mapper->setModel(model);
|
||||||
@ -116,8 +124,11 @@ BookWindow::BookWindow()
|
|||||||
mapper->addMapping(ui.genreEdit, genreIdx);
|
mapper->addMapping(ui.genreEdit, genreIdx);
|
||||||
mapper->addMapping(ui.ratingEdit, model->fieldIndex("rating"));
|
mapper->addMapping(ui.ratingEdit, model->fieldIndex("rating"));
|
||||||
|
|
||||||
connect(ui.bookTable->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),
|
connect(ui.bookTable->selectionModel(),
|
||||||
mapper, SLOT(setCurrentModelIndex(QModelIndex)));
|
&QItemSelectionModel::currentRowChanged,
|
||||||
|
mapper,
|
||||||
|
&QDataWidgetMapper::setCurrentModelIndex
|
||||||
|
);
|
||||||
|
|
||||||
ui.bookTable->setCurrentIndex(model->index(0, 0));
|
ui.bookTable->setCurrentIndex(model->index(0, 0));
|
||||||
}
|
}
|
||||||
@ -127,4 +138,3 @@ void BookWindow::showError(const QSqlError &err)
|
|||||||
QMessageBox::critical(this, "Unable to initialize Database",
|
QMessageBox::critical(this, "Unable to initialize Database",
|
||||||
"Error initializing database: " + err.text());
|
"Error initializing database: " + err.text());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
<ui version="4.0" >
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<author></author>
|
<ui version="4.0">
|
||||||
<comment></comment>
|
|
||||||
<exportmacro></exportmacro>
|
|
||||||
<class>BookWindow</class>
|
<class>BookWindow</class>
|
||||||
<widget class="QMainWindow" name="BookWindow" >
|
<widget class="QMainWindow" name="BookWindow">
|
||||||
<property name="geometry" >
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
@ -12,117 +10,135 @@
|
|||||||
<height>420</height>
|
<height>420</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle" >
|
<property name="windowTitle">
|
||||||
<string>Books</string>
|
<string>Books</string>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="centralWidget" >
|
<widget class="QWidget" name="centralWidget">
|
||||||
<layout class="QVBoxLayout" >
|
<layout class="QVBoxLayout">
|
||||||
<property name="margin" >
|
<property name="spacing">
|
||||||
<number>9</number>
|
|
||||||
</property>
|
|
||||||
<property name="spacing" >
|
|
||||||
<number>6</number>
|
<number>6</number>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>9</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>9</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>9</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>9</number>
|
||||||
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="groupBox" >
|
<widget class="QGroupBox" name="groupBox">
|
||||||
<property name="title" >
|
<property name="title">
|
||||||
<string>Books</string>
|
<string>Books</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" >
|
<layout class="QVBoxLayout">
|
||||||
<property name="margin" >
|
<property name="spacing">
|
||||||
<number>9</number>
|
|
||||||
</property>
|
|
||||||
<property name="spacing" >
|
|
||||||
<number>6</number>
|
<number>6</number>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>9</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>9</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>9</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>9</number>
|
||||||
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QTableView" name="bookTable" >
|
<widget class="QTableView" name="bookTable">
|
||||||
<property name="selectionBehavior" >
|
<property name="selectionBehavior">
|
||||||
<enum>QAbstractItemView::SelectRows</enum>
|
<enum>QAbstractItemView::SelectRows</enum>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="groupBox_2" >
|
<widget class="QGroupBox" name="groupBox_2">
|
||||||
<property name="title" >
|
<property name="title">
|
||||||
<string>Details</string>
|
<string>Details</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QFormLayout" >
|
<layout class="QFormLayout">
|
||||||
<item row="0" column="0" >
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label_5" >
|
<widget class="QLabel" name="label_5">
|
||||||
<property name="text" >
|
<property name="text">
|
||||||
<string><b>Title:</b></string>
|
<string><b>Title:</b></string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="1" >
|
<item row="0" column="1">
|
||||||
<widget class="QLineEdit" name="titleEdit" >
|
<widget class="QLineEdit" name="titleEdit">
|
||||||
<property name="enabled" >
|
<property name="enabled">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0" >
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="label_2_2_2_2" >
|
<widget class="QLabel" name="label_2">
|
||||||
<property name="text" >
|
<property name="text">
|
||||||
<string><b>Author: </b></string>
|
<string><b>Author: </b></string>
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="1" >
|
|
||||||
<widget class="QComboBox" name="authorEdit" >
|
|
||||||
<property name="enabled" >
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="0" >
|
|
||||||
<widget class="QLabel" name="label_3" >
|
|
||||||
<property name="text" >
|
|
||||||
<string><b>Genre:</b></string>
|
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="1" >
|
<item row="1" column="1">
|
||||||
<widget class="QComboBox" name="genreEdit" >
|
<widget class="QComboBox" name="authorEdit">
|
||||||
<property name="enabled" >
|
<property name="enabled">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0" >
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="label_4" >
|
<widget class="QLabel" name="label_3">
|
||||||
<property name="text" >
|
<property name="text">
|
||||||
<string><b>Year:</b></string>
|
<string><b>Genre:</b></string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="1" >
|
<item row="2" column="1">
|
||||||
<widget class="QSpinBox" name="yearEdit" >
|
<widget class="QComboBox" name="genreEdit">
|
||||||
<property name="enabled" >
|
<property name="enabled">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
<property name="prefix" >
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="text">
|
||||||
|
<string><b>Year:</b></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QSpinBox" name="yearEdit">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="prefix">
|
||||||
<string/>
|
<string/>
|
||||||
</property>
|
</property>
|
||||||
<property name="maximum" >
|
<property name="minimum">
|
||||||
<number>2100</number>
|
|
||||||
</property>
|
|
||||||
<property name="minimum" >
|
|
||||||
<number>-1000</number>
|
<number>-1000</number>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
<property name="maximum">
|
||||||
</item>
|
<number>2100</number>
|
||||||
<item row="4" column="0" >
|
|
||||||
<widget class="QLabel" name="label" >
|
|
||||||
<property name="text" >
|
|
||||||
<string><b>Rating:</b></string>
|
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="1" >
|
<item row="4" column="0">
|
||||||
<widget class="QSpinBox" name="ratingEdit" >
|
<widget class="QLabel" name="label">
|
||||||
<property name="maximum" >
|
<property name="text">
|
||||||
|
<string><b>Rating:</b></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QSpinBox" name="ratingEdit">
|
||||||
|
<property name="maximum">
|
||||||
<number>5</number>
|
<number>5</number>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
@ -136,7 +152,6 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
<pixmapfunction></pixmapfunction>
|
|
||||||
<tabstops>
|
<tabstops>
|
||||||
<tabstop>bookTable</tabstop>
|
<tabstop>bookTable</tabstop>
|
||||||
<tabstop>titleEdit</tabstop>
|
<tabstop>titleEdit</tabstop>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user