Мы использовали этот подход в главе 4, когда создавали подклассы QTableWidget и QTableWidgetltem для реализации функциональности электронной таблицы.

В данном разделе мы покажем, как можно применять удобные классы отобра­жения элементов для вывода на экран элементов. В первом примере приводится используемый только для чтения виджет QListWidget, во втором примере - редакти­руемый QTableWidget и в третьем примере - используемый только для чтения QTree-Widget.

Мы начинаем с простого диалогового окна, которое позволяет пользователю вы­брать из списка символ, используемый в блок-схемах программ. Каждый элемент со­стоит из пиктограммы, текста и уникального идентификатора.

Сначала покажем фрагмент заголовочного файла диалогового окна:

class FlowChartSymbolPicker : public QDialog {

Q OBJECT

public:

FlowChartSymbolPicker(const QMap<int, QString> &symbolMap,

QWidget *parent = 0); int selectedld() const { return id; } void done(int result);

};

При создании диалогового окна мы должны передать его конструктору ассоци­ативный массив QMap<int, QString>, и после выполнения конструктора мы можем по­лучить идентификатор выбранного элемента (или -1, если пользователь ничего не выбрал), вызывая selectedld()


Рис. 10.3. Приложение Выбор символа блок-схемы (Flowchart Symbol Picker)

FlowChartSymbolPicker::FlowChartSymbolPicker(

const QMap<int, QString> &symbolMap, QWidget *parent) : QDialog(parent)

{

id = -1;

listWidget = new QListWidget; listWidget->setIconSize(QSize(60, 60));

QMapIterator<int, QString> i(symbolMap); while (i. hasNextO) { i.next О;

QListWidgetltem *item = new QListWidgetItem(i.value(),

listWidget);

item->setIcon(iconForSymbol( irvalue())); item->setData('Qt: :UserRole, i.keyO);

}

}

инициализируем id (идентификатор последнего выбранного элемента) зна­чением -1. Затем мы конструируем QListWidget - удобный виджет отображения эле­ментов.. Мы проходим в цикле по всем элементам ассоциативного массива символов блок-схемы symbolMap и для каждого создаем объект QListWidgetltem. Конструктор QListWidgetltem принимает выводимую на экран строку QString и родительский вид­жет QListWidget.

Затем задаем пиктограмму элемента и вызываем set Data () для сохранения в QListWidgetltem идентификатора элемента. Закрытая функция iconForSymbolO возвращает Qlcon для заданного имени символа. ]


<< назад вперед >>