В этом упражнении вы соберете все вместе и напишете короткий пример использования виджета 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
.