Виджет QListView
QListViewItem
для каждого элемента, включаемого вами в список. У каждого экземпляра типа QListViewItem
есть родитель. Эти элементы с самим виджетом в качестве родителя отображаются как элементы верхнего уровня. Элементы с другим элементом типа QListViewItem
в качестве родителя выводятся на экран как дочерние элементы. В этом примере показаны экземпляры QListViewItem
со всего одним уровнем глубины, но можно создавать и деревья элементов с гораздо большей глубиной.После компиляции и выполнения примера ListView вы увидите виджет QListView
Обратите внимание на то, как дочерние строки почтительно отступают от своих "родителей". Знаки "плюс" и "минус", указывающие на наличие скрытых или сворачивающихся строк, не представлены по умолчанию; в этом примере они задаются с помощью setRootIsDecorated
Рис. 17.7
Диалоговые окна
До сих пор вы создавали подклассы QMainWindow
QMainWindow
предназначены для создания главного окна в вашем приложении, но для кратковременных диалоговых окон следует рассмотреть виджет QDialog
.Диалоговые окна хороши для ввода пользователем определенной информации, предназначенной для конкретной задачи, или передачи пользователю коротких сообщений, таких как предупреждение или сообщение об ошибке. Для таких задач лучше применять подкласс QDialog
Наряду с обычными модальными и немодальными (или безмодальными на языке Qt) диалоговыми окнами комплект Qt также предлагает полумодальное диалоговое окно. В следующем перечне приведены отличия модальных и немодальных диалоговых окон, в него также включены полумодальные окна.
QApplication::processEvents
.QDialog
exec
и show
для обработки модальных и немодальных диалоговых окон, у него есть встроенный класс QLayout
, который можно использовать, и несколько сигналов и слотов, полезных для формирования откликов на нажатие кнопки.Обычно вы будете создавать для своих диалоговых окон класс-потомок QDialog
#include
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
.