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

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

Жанры

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

Мы сможем?

Атталь Аврора
Любовные романы:
5.00
рейтинг книги
Мы сможем?

Хозяин Теней

Петров Максим Николаевич
1. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней

Хозяин Теней 5

Петров Максим Николаевич
5. Безбожник
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Хозяин Теней 5

Играть... в тебя

Зайцева Мария
3. Звериные повадки Симоновых
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Играть... в тебя

Отмороженный 6.0

Гарцевич Евгений Александрович
6. Отмороженный
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Отмороженный 6.0

Двенадцатая реинкарнация. Трилогия

Богдашов Сергей Александрович
Фантастика:
боевая фантастика
5.60
рейтинг книги
Двенадцатая реинкарнация. Трилогия

Царь царей

Билик Дмитрий Александрович
9. Бедовый
Фантастика:
фэнтези
мистика
5.00
рейтинг книги
Царь царей

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

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

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

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

Идеальный мир для Лекаря 21

Сапфир Олег
21. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 21

Седина в бороду, Босс… вразнос!

Трофимова Любовь
Юмор:
юмористическая проза
5.00
рейтинг книги
Седина в бороду, Босс… вразнос!

Газлайтер. Том 29

Володин Григорий Григорьевич
29. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 29

Варяг

Мазин Александр Владимирович
1. Варяг
Фантастика:
альтернативная история
9.10
рейтинг книги
Варяг

Язычник

Мазин Александр Владимирович
5. Варяг
Приключения:
исторические приключения
8.91
рейтинг книги
Язычник