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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 190

Автор НСйл ΠœΡΡ‚ΡŒΡŽ

QComboBox ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ, ΠΊΠ°ΠΊ для чтСния ΠΈ записи, Ρ‚Π°ΠΊ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния. Если ΠΎΠ½ позволяСт Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ввСсти Π½ΠΎΠ²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹ΠΌ; Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΈΠ· Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ списка.

ΠŸΡ€ΠΈ создании Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° QComboBox ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ Π»ΠΈ ΠΎΠ½ для чтСния ΠΈ записи ΠΈΠ»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, задавая логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² конструкторС:

QComboBox *combo = new QComboBox(TRUE, parent, "widgetname");

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° значСния TRUE ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ QComboBox Π² Ρ€Π΅ΠΆΠΈΠΌ "Ρ‡Ρ‚Π΅Π½ΠΈΠ΅/запись". ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ β€” ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ΠΈ имя создаваСмого Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°.

Как всС Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Qt, QComboBox ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ»ΠΈ Π½Π°Π±ΠΎΡ€ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ QString ΠΈΠ»ΠΈ Π² стандартном Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ char*.

Для вставки ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ insertItem:

combo->insertItem(QString("An Item"), 1);

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° QString ΠΈ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² спискС. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС 1 вставляСт Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π² список ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ.

Для добавлСния Π² ΠΊΠΎΠ½Π΅Ρ† списка Π·Π°Π΄Π°ΠΉΡ‚Π΅ любоС ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ число.

Π“ΠΎΡ€Π°Π·Π΄ΠΎ Ρ‡Π°Ρ‰Π΅ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ нСсколько элСмСнтов списка ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, для этого ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ класс QStrList ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π΄Π°Π»Π΅Π΅, массив char*:

char* weather[] = {"Thunder", "Lightning", "Rain", 0};

combo->insertStrList(weather, 3);

И снова Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ вставляСмых Π² список элСмСнтов.

Если Π² Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π΅ QComboBox Π·Π°Π΄Π°Π½ Ρ€Π΅ΠΆΠΈΠΌ "Ρ‡Ρ‚Π΅Π½ΠΈΠ΅/запись", Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ автоматичСски Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ Π² список. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅, экономящСС врСмя свойство, ΠΈΠ·Π±Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°, Ссли ΠΎΠ½ Ρ…ΠΎΡ‡Π΅Ρ‚ ΡƒΠΆΠ΅ Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Ρ€Π°Π·.

ΠœΠ΅Ρ‚ΠΎΠ΄ InsertionPolicy управляСт ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ Π²Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Π² список элСмСнта. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π». 17.4.


Π’Π°Π±Π»ΠΈΡ†Π° 17.4

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ДСйствиС QComboBox::AtTop ВставляСт Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ Π² список элСмСнт ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ QComboBox::AtBottom ВставляСт Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ Π² список элСмСнт послСдним QComboBox::AtCurrent ЗамСняСт ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π² спискС QComboBox::BeforeCurrent ВставляСт Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ элСмСнт ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ ΠΈΠ· списка QComboBox::AfterCurrent ВставляСт Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ элСмСнт послС ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΈΠ· списка QComboBox::NoInsertion Новый элСмСнт Π½Π΅ вставляСтся Π² список Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ²

Для задания ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ InsertionPolicy Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° QComboBox:

combo->setInsertionPolicy(QComboBox::AtTop);

Π”Π°Π²Π°ΠΉΡ‚Π΅ бросим взгляд Π½Π° конструкторы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Ρ‹Π±ΠΎΡ€Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° QComboBox:

#include <qcombobox.h>

QComboBox(QWidget *parent = 0, const char *name = 0);

QComboBox(bool readwrite, QWidget *parent = 0, const char *name = 0);

int count();

void insertStringList(const QStringList& list, int index = -1);

void insertStrList(const QStrList& list, int index = -1);

void insertStrList(const QStrList *list, int index = -1);

void insertStrList (const char **strings, int numStrings = -1, int index = -1);

void insertItem(const QString &t, int index = -1);

void removeItem(int index);

virtual void setCurrentItem(int index);

QString currentText();

virtual void setCurrentText(const QString &);

void setEditable(bool);

Ѐункция count Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π² спискС. QStringList ΠΈ QStrList β€” классы ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ для вставки Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ². Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° removeItem, ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΈ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² currentText ΠΈ setCurrentText, Π° ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ β€” с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° setEditable.

QComboBox ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ сигнал textChanged(QString&) ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π½ΠΎΠ²ΠΎΠΌ Π²Ρ‹Π±ΠΎΡ€Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°, пСрСдавая вновь Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ элСмСнт ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚.

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 17.6.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 17.6. Π’ΠΈΠ΄ΠΆΠ΅Ρ‚ QComboBox

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ сдСлаСтС ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ QComboBox ΠΈ посмотритС, ΠΊΠ°ΠΊ Π²Π΅Π΄ΡƒΡ‚ сСбя сигналы ΠΈ слоты с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ. Π’Ρ‹ создадитС класс ComboBox, ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° QMainWindow. Π’ Π½Π΅ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ Π΄Π²Π° Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° QComboBox: ΠΎΠ΄ΠΈΠ½ для чтСния/записи, Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния. Π’Ρ‹ установитС связь с сигналом textChanged для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ.

1. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ Π½Π°Π·ΠΎΠ²ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ» ComboBox.h:

#include <qmainwindow.h>

#include <qcombobox.h>


class ComboBox : public QMainWindow {

 Q_OBJECT

public:

 ComboBox(QWidget* parent = 0, const char *name = 0);

private slots:

 void Changed(const QString& s);

};

2. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ состоит ΠΈΠ· Π΄Π²ΡƒΡ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² QComboBox: ΠΎΠ΄ΠΈΠ½ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния. Π’Ρ‹ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΎΠ±Π° списка ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈ Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ:

#include "ComboBox.moс"

#include <qlayout.h>

#include <iostream>


ComboBox::ComboBox(QWidget *parent, const char *name) :

 QMainWindow(parent, name) {

 QWidget *widget = new QWidget(this);

 setCentralWidget(widget);

 QVBoxLayout *vbox = new QVBoxLayout(widget, 5, 10, "vbox");

 QComboBox *editablecombo = new QComboBox(TRUE, widget, "editable");

 vbox->addWidget(editablecombo);

 QComboBox *readonlycombo = new QComboBox(FALSE, widget, "readonly");

 vbox->addWidget(readonlycombo);

 static const char* items[] = {"Macbeth", "Twelfth Night", "Othello", 0};

 editablecombo->insertStrList(items);

 readonlycombo->insertStrList(items);

 connect(editablecombo, SIGNAL(textchanged(const QString&),

  this, SLOT(Changed(const QString&)));

 resize(350, 200);

}

3. Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° функция слота. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ s Ρ‚ΠΈΠΏΠ° QString, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ сигналом:

void ComboBox::Changed(const QString& s) {

 std::cout << s << "\n";

}


int main(int argc, char **argv) {

 QApplication app(argc, argv);

 ComboBox* window = new ComboBox();

 app.setMainWidget(window);

 window->show();

 return app.exec();

}

Π’Ρ‹ смоТСтС Π²ΠΈΠ΄Π΅Ρ‚ΡŒ вновь Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ QComboBox Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС Π½Π° рис. 17.6.

Рис. 17.6


Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Π‘ΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ списка Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹. Главная новая Π΄Π΅Ρ‚Π°Π»ΡŒ β€” Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ insertStrList для сохранСния списка Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π² Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π΅.

Как ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… содСрТащих тСкст Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°Ρ…, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ значСния ΠΈΠ»ΠΈ Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС тСкста Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ списка.

QListView

Бписки ΠΈ Π΄Π΅Ρ€Π΅Π²ΡŒΡ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ Qt Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠΌ QListView. Π­Ρ‚ΠΎΡ‚ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ прСдставляСт ΠΊΠ°ΠΊ простыС списки, Ρ‚Π°ΠΊ ΠΈ иСрархичСскиС Π΄Π°Π½Π½Ρ‹Π΅, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π½Π° строки ΠΈ столбцы. Он ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π²Ρ‹Π²ΠΎΠ΄Π° структур ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ΠΈΠ»ΠΈ Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ элСмСнты ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈ ΡΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ, Ρ‰Π΅Π»ΠΊΠ½ΡƒΠ² ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π·Π½Π°ΠΊ "плюс" ΠΈΠ»ΠΈ "минус", Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΌ ΠΎΠ±ΠΎΠ·Ρ€Π΅Π²Π°Ρ‚Π΅Π»Π΅.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° GTK+ ListView Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ QListView ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅, ΠΈ ΠΈΡ… прСдставлСниС, Ρ‡Ρ‚ΠΎ сдСлано для облСгчСния использования, Ссли Π½Π΅ для ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ гибкости.

Π’ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π΅ QListView ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ строки ΠΈΠ»ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ячСйки ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Ρ€Π΅Π·Π°Ρ‚ΡŒ ΠΈ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΠΎ столбцу ΠΈ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ QCheckBox, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹Π΅ Π² ячСйках. Π’ этот Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ встроСно мноТСство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй β€” ΠΊΠ°ΠΊ программисту Π²Π°ΠΌ достаточно лишь Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π·Π°Π΄Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° форматирования.

БоздаСтся Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ QListView ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° ΠΈ собствСнного ΠΈΠΌΠ΅Π½ΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°:

QListView *view = new QListView(parent, "name");

Для задания Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² столбцов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π°Π·Π²Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ addColumn:

view->addColumn("Left Column", width1); // фиксированной ΡˆΠΈΡ€ΠΈΠ½Ρ‹

view->addColumn("Right Column"); // с автоматичСски Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ

Π¨ΠΈΡ€ΠΈΠ½Π° столбца задаСтся Π² пиксСлах ΠΈΠ»ΠΈ, Ссли ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π°, приравниваСтся ΠΊ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π΅ самого Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ элСмСнта Π² столбцС. Π’ дальнСйшСм ΠΏΡ€ΠΈ вставкС ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ элСмСнтов ΡˆΠΈΡ€ΠΈΠ½Π° столбца автоматичСски мСняСтся.

Π”Π°Π½Π½Ρ‹Π΅ Π²ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² QListView с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° QListViewItem, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ строку Π΄Π°Π½Π½Ρ‹Ρ…. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ лишь ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² конструктор ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QListView ΠΈ элСмСнты строки, ΠΈ ΠΎΠ½Π° добавится Π² ΠΊΠΎΠ½Π΅Ρ† прСдставлСния:

QListViewItem *toplevel = new QListViewItem(view, "Left Data", "Right Data");