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

10 QStringList << tr("Key") << tr("Value"));

11 treeWidget->header->setResizeMode(0, QHeaderView::Stretch);

12 treeWidget->header->setResizeMode(1, QHeaderView::Stretch);

13 …

14 setWindowTitle(tr("Settings Viewer"));

15 readSettings;

16 }

Для получения доступа к параметрам настройки приложения необходимо создать объект QSettings с указанием в параметрах названия организации и имени приложения. Мы устанавливаем значения по умолчанию (приложение «Designer» компании «Trolltech») и затем создаем новый объект QTreeWidget. В конце мы вызываем фyнкцию readSettings.

01 void SettingsViewer::readSettings

02 {

03 QSettings settings(organization, application);

04 treeWidget->clear;

05 addChildSettings(settings, 0, "");

06 treeWidget->sortByColurnn(0);

07 treeWidget->setFocus;

08 setWindowTitle(tr("Settings Viewer - %1 by %2")

09 .arg(application).arg(organization));

10 }

Параметры настройки приложения хранятся в виде набора ключей и значений, имеющих иерархическую структуру. Закрытая функция addChildSettings принимает объект параметров настройки, родительский элемент QTreeWidgetItem и текущую «группу». Группа в QSettings аналогична каталогу файловой системы. Функция addChildSettings может вызывать себя рекурсивно для прохода по произвольной структуре типа дерева. При первом ее вызове из функции readSettings передается 0, задавая корень в качестве родительского объекта.

01 void SettingsViewer::addChildSettings(QSettings &settings,

02 QTreeWidgetItem *parent, const QString &group)

03 {

04 QTreeWidgetItem *item;

05 settings.beginGroup(group);

06 foreach (QString key, settings.childKeys) {

07 if (parent) {

08 item = new QTreeWidgetItem(parent);

09 } else {

10 item = new QTreeWidgetItem(treeWidget);

11 }

12 item->setText(0, key);

13 item->setText(1, settings.value(key).toString);

14 }

15 foreach (QString group, settings.childGroups) {

16 if (parent) {

17 item = new QTreeWidgetItem(parent);

18 } else {

19 item = new QTreeWidgetItem(treeWidget);

20 }

21 item->setText(0, group);

21 addChildSettings(settings, item, group);

22 }

23 settings.endGroup;

24 }

Функция addChildSettings используется для создания всех элементов QTreeWidgetItem. Она проходит по всем ключам текущего уровня в иерархии параметров настройки и для каждого ключа создает один объект QTableWidgetItem. Если в качестве родительского элемента задан 0, мы создаем дочерний элемент собственно виджета QTreeWidget (т.е. создается элемент верхнего уровня); в противном случае мы создаем дочерний элемент для объекта parent. В первый столбец записывается имя ключа, а во второй столбец — соответствующее ему значение.

Затем эта функция выполняется для каждой группы текущего уровня. Для каждой группы создается новый объект QTreeWidgetItem, причем в первый столбец записывается имя группы. Затем эта функция рекурсивно вызывает саму себя с указанием группового элемента в качестве родительского для заполнения виджета QTreeWidget дочерними элементами группы.

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