12 cdTableView = new QTableView;
13 cdTableView->setModel(cdModel);
14 cdTableView->setItemDelegate(new QSqlRelationalDelegate(this));
15 cdTableView->setSelectionMode(QAbstractItemView::SingleSelection);
16 cdTableView->setSelectionBehavior(QAbstractItemView::SelectRows);
17 cdTableView->setColumnHidden(Cd_Id, true);
18 cdTableView->resizeColumnsToContents;
Настройка представления таблицы
19 trackModel = new QSqlTableModel(this);
20 trackModel->setTable("track");
21 trackModel->setHeaderData(Track_Title, Qt::Horizontal, tr("Title"));
22 trackModel->setHeaderData(Track_Duration, Qt::Horizontal,
23 tr("Duration"));
24 trackTableView = new QTableView;
25 trackTableView->setModel(trackModel);
26 trackTableView->setItemDelegate(
27 new TrackDelegate(Track_Duration, this));
28 trackTableView->setSelectionMode(QAbstractItemView::SingleSelection);
29 trackTableView->setSelectionBehavior(QAbstractItemView::SelectRows);
Для дорожек мы собираемся выводить на экран только названия песен и их длительности, поэтому достаточно использовать модель
Создание представлений и кнопок, их компоновка и соединения сигнал—слот не содержат ничего особенного, поэтому из оставшейся части конструктора мы покажем только несколько не совсем очевидных соединений.
30 …
31 connect(cdTableView->selectionModel,
32 SIGNAL(currentRowChanged(const QModelIndex &,
33 const QModelIndex &)),
34 this, SLOT(currentCdChanged(const QModelIndex &)));
35 connect(cdModel, SIGNAL(beforeInsert(QSqlRecord &)),
36 this, SLOT(beforeInsertCd(QSqlRecord &)));
37 connect(trackModel, SIGNAL(beforeInsert(QSqlRecord &)),
38 this, SLOT(beforeInsertTrack(QSqlRecord &)));
39 connect(trackModel, SIGNAL(rowsInserted(
40 const QModelIndex &, int, int)),
41 this, SLOT(refreshTrackViewHeader));
42 …
43 }
Первое соединение необычно, поскольку вместо связывания виджета мы связываем модель выборки. Класс
01 void MainForm::currentCdChanged(const QModelIndex &index)
02 {
03 if (index.isValid) {
04 QSqlRecord record = cdModel->record(index.row);
05 int id = record.value("id").toInt;