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

на главную - закладки

Жанры

Основы программирования в 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
Поделиться:
Популярные книги

Франклин Рузвельт. Человек и политик (с иллюстрациями)

Бернс Джеймс Макгрегор
Проза:
историческая проза
6.25
рейтинг книги
Франклин Рузвельт. Человек и политик (с иллюстрациями)

Заговор «Аквитания»

Ладлэм Роберт
Детективы:
политические детективы
5.00
рейтинг книги
Заговор «Аквитания»

Афганский полигон

Кулаков Сергей Федорович
Спецназ. Группа Антитеррор
Детективы:
боевики
6.17
рейтинг книги
Афганский полигон

Новая хронология Греции

Фоменко Анатолий Тимофеевич
Научно-образовательная:
история
5.00
рейтинг книги
Новая хронология Греции

Третий Генерал: Тома I-II

Зот Бакалавр
1. Третий Генерал
Фантастика:
городское фэнтези
попаданцы
аниме
сказочная фантастика
5.00
рейтинг книги
Третий Генерал: Тома I-II

Смертельная мечта

Бова Бен
Фантастика:
научная фантастика
5.00
рейтинг книги
Смертельная мечта

Воин

Бубела Олег Николаевич
2. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.25
рейтинг книги
Воин

Князь Андер Арес 2

Грехов Тимофей
2. Андер Арес
Фантастика:
рпг
аниме
фэнтези
фантастика: прочее
5.25
рейтинг книги
Князь Андер Арес 2

"Фантастика 2024-179". Компиляция. Книги 1-30

Уленгов Юрий
Фантастика 2024. Компиляция
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Фантастика 2024-179. Компиляция. Книги 1-30

Мэр

Астахов Павел Алексеевич
Проза:
современная проза
7.00
рейтинг книги
Мэр

Великий род

Сай Ярослав
3. Медорфенов
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Великий род

"Фантастика 2025-25". Компиляция. Книги 1-24

Казанцев Александр Петрович
Фантастика 2025. Компиляция
Фантастика:
боевая фантастика
попаданцы
фэнтези
5.00
рейтинг книги
Фантастика 2025-25. Компиляция. Книги 1-24

Мир приключений 1984 г.

Ефимов Е.
Альманах "Мир приключений"
Фантастика:
научная фантастика
5.00
рейтинг книги
Мир приключений 1984 г.

Правда о Григории Распутине

Боханов Александр Николаевич
Научно-образовательная:
история
5.00
рейтинг книги
Правда о Григории Распутине