Читаем QT 4: программирование GUI на С++ полностью

03 model->removeRows(listView->currentIndex.row, 1);

04 }

В конструкторе сигнал clicked кнопки Delete (удалить) связывается со слотом del. Поскольку мы только что удалили текущую строку, мы можем вызвать removeRows для текущей позиции индекса и для значения 1 счетчика строк. Как и при выполнении вставки, мы полагаемся на то, что модель должным образом обновит представление.

01 QStringList TeamLeadersDialog::leaders const

02 {

03 return model->stringList;

04 }

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

Создать TeamLeadersDialog можно было бы на основе универсального диалогового окна редактирования списка строк, просто параметризируя заголовок этого окна. Другое часто используемое пользователями универсальное диалоговое окно отображает список файлов или каталогов. В следующем примере применяется класс QDirModel, который моделирует файловую систему компьютера и позволяет показывать (или скрывать) различные атрибуты файлов. Эта модель может применять фильтр для ограничения типов элементов файловой системы при их выводе на экран и упорядочивать элементы различными способами.

Рис. 10.7. Приложение Просмотр каталога.

Мы начнем с создания и настройки модели и представления в конструкторе диалогового окна Просмотр каталога (Directory Viewer).

01 DirectoryViewer::DirectoryViewer(QWidget *parent)

02 : QDialog(parent)

03 {

04 model = new QDirModel;

05 model->setReadOnly(false);

06 model->setSorting(QDir::DirsFirst | QDir::IgnoreCase | QDir::Name);

07 treeView = new QTreeView;

08 treeView->setModel(model);

09 treeView->header->setStretchLastSection(true);

10 treeView->header->setSortIndicator(0, Qt::AscendingOrder);

11 treeView->header->setSortIndicatorShown(true);

12 treeView->header->setClickable(true);

13 QModelIndex index = model->index(QDir::currentPath);

14 treeView->expand(index);

15 treeView->scrollTo(index);

16 treeView->resizeColumnToContents(0);

17 …

18 }

После создания модели мы обеспечиваем возможность ее редактирования и устанавливаем различные начальные атрибуты упорядочивания. Затем мы создаем объект QTreeView для отображения на экране данных модели. Заголовок QTreeView может использоваться пользователем для управления сортировкой. Делая заголовок восприимчивым к щелчкам мышки, пользователь может сортирбвать данные по выбранному им в заголовке столбцу, причем повторные щелчки переключают направление сортировки, т.е сортировку по возрастанию на сортировку по убыванию и наоборот. После настройки заголовков представления данных в виде дерева мы получаем индекс модели текущего каталога и обеспечиваем просмотр содержимого этого каталога, раскрывая при необходимости его подкаталоги, используя expand, и устанавливая изображение на его начало, используя scrollTo. Затем мы обеспечиваем ширину первого столбца, достаточную для размещения всех элементов без вывода многоточия (…).

Во фрагменте конструктора, который здесь не показан, мы связываем кнопки Create Directory (создать каталог) и Remove (удалить) со слотами, выполняющими соответствующие действия. Нам не нужно иметь кнопку Rename (переименовать), поскольку пользователи могут переименовывать элементы каталога по месту, нажимая клавишу F2 и осуществляя ввод символов с клавиатуры.

01 voidDirectoryViewer::createDirectory

02 {

03 QModelIndex index;

04 if (!index.isValid)

05 return;

06 QString dirName = QInputDialog::getText(this,

07 tr("Create Directory"), tr("Directory name"));

08 if (!dirName.isEmpty) {

09 if (!model->mkdir(index,dirName).isValid)

10 QMessageBox::information(this,

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже