Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«QT 4: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ GUI Π½Π° Π‘++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 56

Автор Жасмин Π‘Π»Π°Π½ΡˆΠ΅Ρ‚

ПослС создания ΠΈ Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ²ΠΊΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² столбцов ΠΌΡ‹ Π² Ρ†ΠΈΠΊΠ»Π΅ просматриваСм всС ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Π½Π°ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Ρ‹ (x, Ρƒ) ΠΌΡ‹ создаСм Π΄Π²Π° элСмСнта QTableWidgetItem, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ x ΠΈ Ρƒ. Π­Ρ‚ΠΈ элСмСнты Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ QTableWidget::setItem(), Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΊΡ€ΠΎΠΌΠ΅ самого элСмСнта Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π΅Π³ΠΎ строка ΠΈ столбСц.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ QTableWidget Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ячСйку Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, установив Π½Π° Π½Π΅Π΅ курсор ΠΈ Π½Π°ΠΆΠ°Π² F2 ΠΈΠ»ΠΈ просто вводя тСкст с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. ВсС сдСланныС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ измСнСния автоматичСски сохранятся Π² элСмСнтах QTableWidgetltem. Π—Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° setEditTriggers(QAbstractItemView::NoEditTriggers).

01 void CoordinateSetter::addRow()

02 {

03 int row = tableWidget->rowCount();

04 tableWidget->insertRow(row);

05 QTableWidgetltem *item0 = new QTableWidgetltem;

06 item0->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);

07 tableWidget->setItem(row, 0, item0);

08 QTableWidgetltem *item1 = new QTableWidgetltem;

09 item1->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);

10 tableWidget->setItem(row, 1, item1);

11 tableWidget->setCurrentItem(item0);

12 }

Π‘Π»ΠΎΡ‚ addRow() вызываСтся, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ‰Π΅Π»ΠΊΠ°Π΅Ρ‚ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Add Row (Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ строку). ΠœΡ‹ добавляСм Π² ΠΊΠΎΠ½Π΅Ρ† Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½ΠΎΠ²ΡƒΡŽ строку, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ insertRow(). Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ попытаСтся ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ячСйку Π½ΠΎΠ²ΠΎΠΉ строки, QTableWidget автоматичСски создаст Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QTableWidgetItem.

01 void CoordinateSetter::done(int result)

02 {

03 if (result == QDialog::Accepted) {

04 coordinates->clear();

05 for (int row = 0; row < tableWidget->rowCount(); ++row) {

06 double x = tableWidget->item(row, 0)->text().toDouble();

07 double Ρƒ = tableWidget->item(row, 1)->text().toDouble();

08 coordinates->append(QPointF(x, y));

09 }

10 }

11 QDialog::done(result);

12 }

НаконСц, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠ½ΠΎΠΏΠΊΡƒ OK, ΠΌΡ‹ ΠΎΡ‡ΠΈΡ‰Π°Π΅ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π½Π΅Π΅ Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, ΠΈ создаСм Π½ΠΎΠ²Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Π½Π° основС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π² элСмСнтах Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° QTableWidget.

Π’ качСствС нашСго Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ ΠΈ послСднСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° примСнСния Π² Qt ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² отобраТСния элСмСнтов ΠΌΡ‹ рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ настройки Qt—прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ QTreeWidget. Π”Π°Π½Π½Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния.

Рис. 10.5. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² настройки (Settings Viewer).

НиТС приводится Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ конструктора:

01 SettingsViewer::SettingsViewer(QWidget *parent)

02 : QDialog(parent)

03 {

04 organization = "Trolltech";

05 application = "Designer";

06 treeWidget = new QTreeWidget;

08 treeWidget->setColumnCount(2);

09 treeWidget->setHeaderLabels(

10 QStringList() << tr("Key") << tr("Value"));

11 treeWidget->header()->setResizeMode(0, QHeaderView::Stretch);

12 treeWidget->header()->setResizeMode(1, QHeaderView::Stretch);

13 …

14 setWindowTitle(tr("Settings Viewer"));

15 readSettings();

16 }

Для получСния доступа ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ настройки прилоТСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QSettings с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… названия ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΈΠΌΠ΅Π½ΠΈ прилоТСния. ΠœΡ‹ устанавливаСм значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Β«DesignerΒ» ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Β«TrolltechΒ») ΠΈ Π·Π°Ρ‚Π΅ΠΌ создаСм Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QTreeWidget. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„yΠ½ΠΊΡ†ΠΈΡŽ readSettings().

01 void SettingsViewer::readSettings()

02 {

03 QSettings settings(organization, application);

04 treeWidget->clear();

05 addChildSettings(settings, 0, "");

06 treeWidget->sortByColurnn(0);

07 treeWidget->setFocus();

08 setWindowTitle(tr("Settings Viewer - %1 by %2")

09 .arg(application).arg(organization));

10 }

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ настройки прилоТСния хранятся Π² Π²ΠΈΠ΄Π΅ Π½Π°Π±ΠΎΡ€Π° ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ структуру. Закрытая функция addChildSettings() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² настройки, Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ элСмСнт QTreeWidgetItem ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Β«Π³Ρ€ΡƒΠΏΠΏΡƒΒ». Π“Ρ€ΡƒΠΏΠΏΠ° Π² QSettings Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы. Ѐункция addChildSettings() ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ сСбя рСкурсивно для ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ структурС Ρ‚ΠΈΠΏΠ° Π΄Π΅Ρ€Π΅Π²Π°. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π΅Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ readSettings() пСрСдаСтся 0, задавая ΠΊΠΎΡ€Π΅Π½ΡŒ Π² качСствС Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

01 void SettingsViewer::addChildSettings(QSettings &settings,

02 QTreeWidgetItem *parent, const QString &group)

03 {

04 QTreeWidgetItem *item;

05 settings.beginGroup(group);


06 foreach (QString key, settings.childKeys()) {

07 if (parent) {

08 item = new QTreeWidgetItem(parent);

09 } else {

10 item = new QTreeWidgetItem(treeWidget);

11 }

12 item->setText(0, key);

13 item->setText(1, settings.value(key).toString());

14 }


15 foreach (QString group, settings.childGroups()) {

16 if (parent) {

17 item = new QTreeWidgetItem(parent);

18 } else {

19 item = new QTreeWidgetItem(treeWidget);

20 }

21 item->setText(0, group);

21 addChildSettings(settings, item, group);

22 }

23 settings.endGroup();

24 }

Ѐункция addChildSettings() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания всСх элСмСнтов QTreeWidgetItem. Она ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎ всСм ΠΊΠ»ΡŽΡ‡Π°ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ уровня Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² настройки ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° создаСт ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QTableWidgetItem. Если Π² качСствС Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ элСмСнта Π·Π°Π΄Π°Π½ 0, ΠΌΡ‹ создаСм Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ элСмСнт собствСнно Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° QTreeWidget (Ρ‚.Π΅. создаСтся элСмСнт Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня); Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΌΡ‹ создаСм Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ элСмСнт для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° parent. Π’ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ столбСц записываСтся имя ΠΊΠ»ΡŽΡ‡Π°, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ столбСц β€” ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π΅ΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π—Π°Ρ‚Π΅ΠΌ эта функция выполняСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ уровня. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ создаСтся Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QTreeWidgetItem, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ столбСц записываСтся имя Π³Ρ€ΡƒΠΏΠΏΡ‹. Π—Π°Ρ‚Π΅ΠΌ эта функция рСкурсивно Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ саму сСбя с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π³Ρ€ΡƒΠΏΠΏΠΎΠ²ΠΎΠ³ΠΎ элСмСнта Π² качСствС Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ для заполнСния Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° QTreeWidget Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌΠΈ элСмСнтами Π³Ρ€ΡƒΠΏΠΏΡ‹.

ΠŸΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ отобраТСния элСмСнтов ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚ΠΈΠ»ΡŒ программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Ρ‚ΠΎΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ примСнялся Π² Ρ€Π°Π½Π½ΠΈΡ… вСрсиях Qt: Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ всСго Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… Π² Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ отобраТСния элСмСнтов с использованиСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ элСмСнты Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ (Ссли элСмСнты Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅) ΠΈΡ… запись ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² источник Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… ΠΌΡ‹ Π²Ρ‹ΠΉΠ΄Π΅ΠΌ Π·Π° Ρ€Π°ΠΌΠΊΠΈ этого простого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ всСми прСимущСствами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π΅Ρ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Qt модСль/прСдставлСниС.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ

Π’ Qt Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ нСсколько ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для использования с классами прСдставлСний:

β€’ QStringListModel β€” Ρ…Ρ€Π°Π½ΠΈΡ‚ список строк;

β€’ QStandardltemModel β€” Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ иСрархичСской структуры;

β€’ QDirModel β€” Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ структуру локальной Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы;

β€’ QSqlQueryModel β€” Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π°Π±ΠΎΡ€ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° SQL—запроса;

β€’ QSqlTableModel β€” Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ SQLβ€”Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ;

β€’ QSqlRelationalTableModel β€” Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ SQLβ€”Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ с внСшними ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ (foreign keys);

β€’ QSortFilterProxyModel β€” сортируСт ΠΈ/ΠΈΠ»ΠΈ пропускаСт Ρ‡Π΅Ρ€Π΅Π· Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Π΄Ρ€ΡƒΠ³ΡƒΡŽ модСль.

Π’ Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ рассмотрим способы примСнСния ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ QStringListModel, QDirModel ΠΈ QSortFilterProxyModel. SQLβ€”ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Π³Π»Π°Π²Π΅ 13.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с простого Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для добавлСния, удалСния ΠΈ рСдактирования списка строк QStringList, Π³Π΄Π΅ каТдая строка прСдставляСт Π»ΠΈΠ΄Π΅Ρ€Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

НиТС приводится ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ конструктора:

01 TeamLeadersDialog::TeamLeadersDialog(const QStringList &leaders,

02 QWidget *parent)

03 : QDialog(parent)

04 {

05 model = new QStringListModel(this);

06 model->setStringList(leaders);

07 listView = new QListView;

08 listView->setModel(model);

09 listView->setEditTriggers(QAbstractItemView::AnyKeyPressed

10 | QAbstractItemView::DoubleClicked);

11 …

12 }

Рис. 10.6. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π›ΠΈΠ΄Π΅Ρ€Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄ (Team Leaders).

ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с создания ΠΈ заполнСния ΠΌΠΎΠ΄Π΅Π»ΠΈ QStringListModel. Π—Π°Ρ‚Π΅ΠΌ создадим прСдставлСниС QListView ΠΈ свяТСм Π΅Π³ΠΎ с Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ созданной модСлью. Установим Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΠΈ рСдактирования, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строку, просто вводя символ ΠΈΠ»ΠΈ дСлая Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Ρ‰Π΅Π»Ρ‡ΠΎΠΊ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ всС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΠΈ рСдактирования ΡΠ±Ρ€ΠΎΡˆΠ΅Π½Ρ‹ для QListView, фактичСски дСлая это прСдставлСниС ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния.