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

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

Жанры

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

В этом упражнении вы соберете все вместе и напишете короткий пример использования виджета QListView.

Давайте для краткости пропустим заголовочный файл и рассмотрим реализацию класса, файл ListView.cpp.

#include "Listview.moc"

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

 QMainWindow(parent, name) {

 listview = new QListView(this, "listview1");

 listview->addColumn("Artist");

 listview->addColumn("Title");

 listview->addColumn("Catalogue");

 listview->setRootIsDecorated(TRUE);

 QListViewItem* toplevel = new QListViewItem(listview, "Avril Lavigne",

"Let Go", "AVCD01");

 new QListViewItem(toplevel, "Complicated");

 new QListViewItem(toplevel, "Sk8er Boi");

 setCentralWidget(listview);

}

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

 QApplication app(argc, argv);

 ListView *window = new ListView;

 app.setMainWidget(window);

 window->show;

 return app.exec;

}

Как это работает

Виджет

QListView
кажется сложным, потому что он действует и как список элементов, и как дерево элементов. В вашем программном коде необходимо создать экземпляры
QListViewItem
для каждого элемента, включаемого вами в список. У каждого экземпляра типа
QListViewItem
есть родитель. Эти элементы с самим виджетом в качестве родителя отображаются как элементы верхнего уровня. Элементы с другим элементом типа
QListViewItem
в качестве родителя выводятся на экран как дочерние элементы. В этом примере показаны экземпляры
QListViewItem
со всего одним уровнем глубины, но можно создавать и деревья элементов с гораздо большей глубиной.

После компиляции и выполнения примера ListView вы увидите виджет

QListView
в действии, как показано на рис. 17.7.

Обратите внимание на то, как дочерние строки почтительно отступают от своих "родителей". Знаки "плюс" и "минус", указывающие на наличие скрытых или сворачивающихся строк, не представлены по умолчанию; в этом примере они задаются с помощью

setRootIsDecorated
.

Рис. 17.7

Диалоговые окна

До сих пор вы создавали подклассы

QMainWindow
для построения своих интерфейсов. Объекты
QMainWindow
предназначены для создания главного окна в вашем приложении, но для кратковременных диалоговых окон следует рассмотреть виджет
QDialog
.

Диалоговые окна хороши для ввода пользователем определенной информации, предназначенной для конкретной задачи, или передачи пользователю коротких сообщений, таких как предупреждение или сообщение об ошибке. Для таких задач лучше применять подкласс

QDialog
, поскольку вы получаете удобные методы формирования диалогового окна и специализированные сигналы и слоты для обработки ответов пользователя.

Наряду с обычными модальными и немодальными (или безмодальными на языке Qt) диалоговыми окнами комплект Qt также предлагает полумодальное диалоговое окно. В следующем перечне приведены отличия модальных и немодальных диалоговых окон, в него также включены полумодальные окна.

 Модальное диалоговое окно блокирует ввод во все другие окна, чтобы заставить пользователя дать ответ в диалоговом окне. Модальные диалоговые окна полезны для захвата немедленного ответа пользователя и отображения важных сообщений об ошибках.

 Немодальное диалоговое окно — неблокирующее окно, которое действует обычно наряду с другими окнами приложения. Немодальные диалоговые окна удобны для окон поиска или ввода, в которых вы сможете, например, копировать и вставлять значения в главное окно и из него.

 Полумодальное диалоговое окно — это модальное окно, не имеющее своего цикла событий. Это позволяет возвращать управление приложению, но сохранять блокировку ввода для других окон. Полумодальные окна бывают полезны в редких случаях, когда у вас есть индикатор выполнения процесса важной, требующей значительного времени операции, и вы хотите дать пользователю возможность отменить ее при необходимости. Поскольку у такого окна нет собственного цикла событий, для его обновления вы должны периодически вызывать метод

QApplication::processEvents
.

QDialog

QDialog
— базовый класс диалоговых окон в Qt, предоставляющий методы
exec
и
show
для обработки модальных и немодальных диалоговых окон, у него есть встроенный класс
QLayout
, который можно использовать, и несколько сигналов и слотов, полезных для формирования откликов на нажатие кнопки.

Обычно вы будете создавать для своих диалоговых окон класс-потомок

QDialog
и вставлять в него виджеты для создания интерфейса диалогового окна:

#include <qdialog.h>

MyDialog::MyDialog(QWidget *parent, const char *name) : QDialog(parent, name) {

 QHBoxLayout *hbox = new QHBoxLayout(this);

 hbox->addWidget(new Qlabel("Enter your name"));

 hbox->addWidget(new QLineEdit);

 hbox->addWidget(ok_pushbutton);

 hbox->addWidget(cancel_pushbutton);

 connect(ok_pushbutton, SIGNAL(clicked), this, SLOT(accept));

 connect(cancel_pushbutton, SIGNAL(clicked), this, SLOT(reject));

}

В отличие от виджета типа

QMainWindow
вы можете задать объект
MyDialog
как родительский для своего объекта
QLayout
без создания пустого
QWidget
в качестве родительского.

Примечание

Имейте в виду, что в этом примере пропущен программный код для создания виджетов

ok_pushbutton
и
cancel_pushbutton
.

Поделиться:
Популярные книги

Последний Паладин. Том 11

Саваровский Роман
11. Путь Паладина
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Последний Паладин. Том 11

На границе империй. Том 6

INDIGO
6. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.31
рейтинг книги
На границе империй. Том 6

Наследие Маозари 6

Панежин Евгений
6. Наследие Маозари
Фантастика:
попаданцы
постапокалипсис
рпг
фэнтези
эпическая фантастика
5.50
рейтинг книги
Наследие Маозари 6

Последний Паладин. Том 10

Саваровский Роман
10. Путь Паладина
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Последний Паладин. Том 10

Кукла госпожи Барк

Мугуев Хаджи-Мурат Магометович
Детективы:
политические детективы
5.00
рейтинг книги
Кукла госпожи Барк

Неучтенный элемент. Том 10

NikL
10. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 10

Наномашины, звереныш! Том 5

Новиков Николай Васильевич
5. Первый среди карапузов
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Наномашины, звереныш! Том 5

На границе империй. Том 7. Часть 5

INDIGO
11. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 7. Часть 5

Протокол "Наследник"

Лисина Александра
1. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Протокол Наследник

Граф

Ланцов Михаил Алексеевич
6. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Граф

Ахтимаг

Бабкин Михаил Александрович
Фантастика:
фэнтези
детективная фантастика
7.38
рейтинг книги
Ахтимаг

Первый среди равных. Книга XIII

Бор Жорж
13. Первый среди Равных
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Первый среди равных. Книга XIII

Локки 5. Потомок бога

Решетов Евгений Валерьевич
5. Локки
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Локки 5. Потомок бога

Голодный гоблин

Карр Джон Диксон
Детективы:
классические детективы
5.00
рейтинг книги
Голодный гоблин