Во многих случаях пользователю необходимо работать только с относительно небольшим количеством элементов. В такой ситуации, как правило, мы можем использовать удобные классы Qt по отображению элементов
При использовании больших наборов данных часто оказывается недопустимым дублирование данных. В этих случаях мы можем применять классы Qt по отображению элементов
Применение удобных классов отображения элементов
Удобные Qt—подклассы отображения элементов обычно использовать проще, чем определять пользовательскую модель, и они особенно удобны, когда разделение модели и представления нам не дает преимущества. Мы использовали этот подход в главе 4, когда создавали подклассы
В данном разделе мы покажем, как можно применять удобные классы отображения элементов для вывода на экран элементов. В первом примере приводится используемый только для чтения виджет
Мы начинаем с простого диалогового окна, которое позволяет пользователю выбрать из списка символ, используемый в блок-схемах программ. Каждый элемент состоит из пиктограммы, текста и уникального идентификатора.
Сначала покажем фрагмент заголовочного файла диалогового окна:
01 class FlowChartSymbolPicker : public QDialog {
02 Q_OBJECT
03 public:
04 FlowChartSymbolPicker(const QMap
05 QWidget *parent = 0);
06 int selectedId() const { return id; }
07 void done(int result);
08 …
09 }
При создании диалогового окна мы должны передать его конструктору ассоциативный массив
01 FlowChartSymbolPicker::FlowChartSymbolPicker(
02 const QMap
03 : QDialog(parent)
04 {
05 id = -1;
06 listWidget = new QListWidget;
07 listWidget->setIconSize(QSize(60, 60));
08 QMapIterator
09 while (i.hasNext()) {
10 i.next();
11 QListWidgetItem *item = new QListWidgetItem(i.value(),
12 listWidget);
13 item->setIcon(iconForSymbol(i.value()));
14 item->setData(Qt::UserRole, i.key());
15 …
16 }
17 }
Мы инициализируем
Затем задаем пиктограмму элемента и вызываем