Ширина столбца задается в пикселах или, если пропущена, приравнивается к величине самого длинного элемента в столбце. В дальнейшем при вставке и удалении элементов ширина столбца автоматически меняется.
Данные вставляются в 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
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.
QListViewВ этом упражнении вы соберете все вместе и напишете короткий пример использования виджета 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;
}
Как это работает