Использование контейнеров на примере QList




Использование массивов в C++ связано с рядом неудобств. Для их устранения разработаны классы-хранилища, как в стандартной библиотеке C++, так и в Qt (QVector<T>, QList<T>, QLinkedList<T>, QStack<T>, QQueue<T>, QMap<K,T>, QMultiMap<K,T>, QHash<K,T> и QMultiHash<K,T>) см. [Шлее, глава 4]. Символы T и K означают, что контейнер может быть использован для хранения данных любого типа.

Наиболее универсальным является класс QList. Примеры его использования:

 

QList<int> listI;

QList<QString> listS;

 

Добавить данные можно с помощью операции направления в поток.

 

listS << "один" << "два" << "три";

 

У всех контейнеров есть общие методы:

число элементов

 

int size() const;

 

удалить все элементы

 

void clear();

 

строка пустая? true, если size() == 0

 

bool isEmpty() const;

 

Также для них перегружены операторы сравнения == и!=.

Контейнер QStringList

Класс QStringList является альтернативным определением для контейнера QList<QString>. Кроме того, существует несколько дополнительных функций. Строка может быть разбита на подстроки с помощью функции QStringList::split():

 

QString str = "polluter pays principle";

QStringList words = QStringList::split(" ", str);

 

В этом примере, строка "polluter pays principle" разбивается на три строки; "polluter", "pays" и "principle". Функция split() может принимать третий необязательный параметр типа bool, который определяет – должны ли игнорироваться пустые подстроки (по умолчанию) или нет.

Элементы списка QStringList могут быть объединены в одну строку, с помощью функции join(). В качестве аргумента ей передается строка, которая должна быть вставлена между объединяемыми строками. Например, следующий код демонстрирует, как можно объединить все строки в списке, отсортированном по алфавиту, в единую строку, причем подстроки отделяются друг от друга символом перевода строки:

 

words.sort();

str = words.join("\n");

 

Еще одна немаловажная операция над строками – определение длины строки. Для этого предназначена функция length() и, как вариант, isEmpty(), которая возвращает true, если длина строки равна 0.

Использование редактора форм (Qt Designer)

Как правило, создание программы начинается с заполнения главного окна виджетами. Проще всего сделать это в редакторе форм Qt Designer, встроенному в Qt Creator. Для его запуска достаточно дважды кликнуть по файлу формы (mainwindows.ui в нашем проекте). Все результаты редактирования форм, рассматриваемые в данном разделе можно произвести, путём добавления кода в файлы mainwindows.h и mainwindows.cpp. Но использование редактора форм позволит ускорить и упростить процесс разработки. Окно Qt Designer, вызываемое двойным кликом мыши по файлу mainwindows.ui, изображено на рисунке.

 
 
 
 
 
 
Z
X

Рисунок – окно Qt Designer

В центральной части окна изображён прототип (форма) будущего окна (1). В правой верхней части редактора форм расположено окно с перечнем всех виджетов (2), расположенных на данной форме. С помощью перетаскивания можно поместить любой из доступных в списке (3) виджетов на форму. При выделении одного из виджетов на прототипе или в перечне в правой нижней части окна становится доступна таблица его свойств (4). Свойства выбранного виджета и могут быть изменены. К основным свойствам графических объектов, объявленных в классе QWidget, относятся доступность, политика разметов, минимальный, максимальный и базовый размеры, палитра, шрифт и его характеристики, тип курсора. Основные графические компоненты: элементы формирования, элементы управления, элементы ввода (InputWidgets), элементы отображения (DisplayWidgets). В нижней части окна находится 2 области для редактирования действий и редактирования сигналов и слотов (5).

Приложение QDesigner содержит инструменты для создания слотов пользовательских объектов, переопределения виджетов на форме и формирования меню.

Элементы формирования

Виджеты, которые используются для размещения других элементов, но сами не отображаются. Очень полезной функцией редактора является автоматическая компоновка виджетов. Оно осуществляется с помощью нажатия кнопки (Z на рис. выше) или кнопки (X на рис. выше) после предварительного размещения объектов на форме. Кроме того, можно применять компоновку для размещения элементов на отдельных виджетах-компоновщиках (см. закладку Layouts в списке доступных виджетов).

Элементы управления

Кнопки (Button)

Базовым для всех кнопок является класс QAbstractButton. В нем реализованы методы и возможности, присущие всем кнопкам. В редакторе форм, соответствующие QAbstractButton параметры выделены зелёным фоном.

Рисунок – свойства объекта QAbstractButton

Таблица – свойства объекта QAbstractButton

Свойство Тип Описание
text QString Поясняющая надпись на кнопке.
shortcut QKeySequence Хранит введённую комбинацию клавиш. Делает эквивалентными нажатие кнопки мышью и нажатие выбранного сочетания клавиш.
checkable bool Переводит кнопку в режим выключателя (триггера). После этого становится активным свойство checked.
checked bool Состояние переключателя (вкл./выкл. т.е. true/false, 1/0)
autoRepeat bool Если это свойство установлено, то сигналы pressed(), released() и clicked().
autoExclusive bool Если это свойство установлено, то все кнопки, являющиеся дочерними для одного виджета, будут вести себя так, как будто они входят эксклюзивную группу. В эксклюзивной группе только одна из кнопок может иметь свойство checked равное true.
autoRepeatDelay int Начальная задержка перед автоповтором (в миллисекундах), работающим, когда разрешён autoRepeat.
autoRepeatInterval int Интервал автоповторения клика в случае зажатия кнопки мыши (в миллисекундах)

 

Для свойств, приведённых в таблице существуют интерфейсы с типовыми названиями. Методы для получения значений свойств часто совпадают с ними по названию. Иногда названия состоит из названия свойства из приставки "is" и названия метода, см. таблицу ниже. Некоторые из приведённых методов являются сигналами и слотами.

Таблица – методы-интерфейсы свойств класса QAbstractButton

Свойство Метод установки значения Метод получения значения
text setText(QString) text()
shortcut setShortcut(const QKeySequence &key) shortcut()
checkable setCheckable(bool) isCheckable()
checked setChecked(bool) isChecked()
autoRepeat setAutoRepeat(bool) autoRepeat()
autoExclusive setAutoExclusive(bool) autoExclusive()
autoRepeatDelay setAutoRepeatDelay(int) autoRepeatDelay()
autoRepeatInterval setAutoRepeatInterval(int) autoRepeatInterval()

 

Как можно увидеть в справочной документации, большинство функций, перечисленных в третьей колонки таблицы имеют модификатор const

 

QString text () const

 

который используется в C++ для обозначения функций, не изменяющих значения своих свойств в процессе работы. Далее приведём таблицы сигналов и слотов.

Таблица – сигналы класса QAbstractButton.

Сигнал Описание
clicked() отправляется при щелчке кнопкой мыши
pressed() отправляется при нажатии на кнопку мыши
released() отправляется при отпускании кнопки мыши
toggled() отправляется при изменении состояния кнопки, имеющей статус выключателя

Таблица – слоты класса QAbstractButton.

Слот Описание
click() Имитирует щелчок по кнопке
toggle() Меняет состояние кнопки-выключателя

 

Класс QAbstractButton имеет классы-наследники QCheckBox, QPushButton, QRadioButton, QToolButton, др. Эти объекты присутствуют списке доступных виджетов Qt Designer и могут быть размещены на форме. Их свойства и методы QAbstractButton доступны в них. Больше информации о использовании виджетов можно найти в [Шлее 5.3 гл. 7-11]



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-04-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: