Чтение онлайн

на главную

Жанры

Основы программирования в Linux
Шрифт:

 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");

Первый параметр — либо объект

QListView
, как в данном случае, либо еще один объект типа
QListViewItem
. Если передается
QListViewItem
, строка создается как дочерняя по отношению к этому объекту
QListViewItem
. Таким образом, структура дерева формируется передачей объекта
QListView
для узлов верхнего уровня и затем последующих объектов типа
QListViewItem
для дочерних или подчиненных узлов.

Остальные параметры — данные каждого столбца, по умолчанию равные

NULL
, если не заданы.

Добавление дочернего узла — это просто вариант передачи в функцию указателя верхнего уровня. Если вы не добавляете последующие дочерние узлы в объект

QListViewItem
, нет необходимости сохранять возвращаемый указатель:

new QListViewItem(toplevel, "Left Data", "Right Data");

// Дочерний по отношению к верхнему уровню

В API

QListViewItem
можно найти методы обхода узлов дерева на случай корректировки конкретных строк:

#include <qlistview.h>

virtual void insertItem(QListviewitem* newChild);

virtual void setText(int column, const QString& text);

virtual QString text(int column) const;

QListViewItem* firstChild const;

QListViewItem* nextSibling const;

QListViewItem* parent const;

QListViewItem* itemAbove;

QListViewItem *itemBelow;

Получить первую строку в дереве можно, вызвав метод

firstChild
для самого объекта
QListView
. Затем можно многократно вызывать
firstChild
и
nextSibling
для возврата фрагментов или целого дерева.

Приведенный далее фрагмент программного кода выводит первый столбец всех узлов верхнего уровня:

QListViewItem *child = view->firstChild;

while(child) {

 cout << myChild->text(1) << "\n";

 myChild = myChild->nextSibling;

}

Все подробности, касающиеся

QListView
,
QListViewItem
и
QCheckListView
, см. в документации API комплекта Qt.

Выполните упражнение 17.7.

Упражнение 17.7 Виджет
QListView
Поделиться:
Популярные книги

Студент

Гуров Валерий Александрович
1. Студент
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Студент

Варлорд

Астахов Евгений Евгеньевич
3. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Варлорд

Как я строил магическую империю

Зубов Константин
1. Как я строил магическую империю
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Как я строил магическую империю

Кодекс Охотника. Книга XII

Винокуров Юрий
12. Кодекс Охотника
Фантастика:
боевая фантастика
городское фэнтези
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XII

Неудержимый. Книга II

Боярский Андрей
2. Неудержимый
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Неудержимый. Книга II

Измена

Рей Полина
Любовные романы:
современные любовные романы
5.38
рейтинг книги
Измена

Пенсия для морского дьявола

Чиркунов Игорь
1. Первый в касте бездны
Фантастика:
попаданцы
5.29
рейтинг книги
Пенсия для морского дьявола

Не грози Дубровскому! Том V

Панарин Антон
5. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том V

Утопающий во лжи 3

Жуковский Лев
3. Утопающий во лжи
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
Утопающий во лжи 3

Драконий подарок

Суббота Светлана
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Драконий подарок

Средневековая история. Тетралогия

Гончарова Галина Дмитриевна
Средневековая история
Фантастика:
фэнтези
попаданцы
9.16
рейтинг книги
Средневековая история. Тетралогия

Измена. Возвращение любви!

Леманн Анастасия
3. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Возвращение любви!

Комбинация

Ланцов Михаил Алексеевич
2. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Комбинация

Кодекс Охотника. Книга V

Винокуров Юрий
5. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
4.50
рейтинг книги
Кодекс Охотника. Книга V