|
Идея создания подобного компонента для Qt у меня возникла
давно (около года назад), когда я писал очередную
программу, в которой требовался ввод и изменения множества
разнотипных значений. Qt Designer, Delphi, Visual
Studio и прочие программы имели такие средства для
редактирования списков значений, но компонентов для
использования в собственных программах, к сожалению,
не находилось. А между тем, вещь очень нужная.
Буквально через несколько дней появилась первая версия
компонента TValueBrowser,
которая поддерживала ввод и редактирование целых чисел,
булевских значений, строк, текста, а также выбор из
списка (позднее были добавлены выбор даты и цвета).
Компонент успешно был использован в нескольких достаточно
серьезных программах (я надеюсь, что кому-либо он
также пригодился).
Естественно, что со временем возможности компонента
перестали меня устраивать (так, нельзя было редактировать
текст в списке, использовать "специальные"
значения, не поддерживалась иерархичность компонентов
и т.д.) Кроме этого, когда я писал TValueBrowser,
я еще не слишком хорошо знал Qt, и многое было сделано
некрасиво и неправильно. Поэтому я начал делать новую
версию - TValueBrowser 2, в которой
постараюсь учесть все, что получится :)
Итак, что компонент умеет уже на сегодня:
- все значения хранятся в виде QVariant;
- поддерживаются "специальные значения",
по умолчанию это "пусто", "нет
значения", "неиспользуемо", "по
умолчанию" и "плохое" (их список
может быть изменен в программе по желанию);
- многостраничность (вместо того,
чтобы для каждой страницы применять свой TValueBrowser,
теперь можно просто указать, на какой странице
что должно отображаться);
- иерархичность значений;
- краткие описания выбранного значения
(значению может быть задана строка описания (hint),
и при выборе выдается соответствующий сигнал,
перехватив который, можно отобразить данную строку);
- значительно расширено значение-список:
- можно вводить произвольный текст;
- поддерживается "быстрый"
ввод (при вводе начальных букв,
автоматически выбирается наиболее подходящее
значение, аналогично инспектору объектов
в Delphi);
- изображения к элементам списка
видны и при редактировании;
- авторасширение списков (актуально
для строк - запоминать последние введенные
значения);
- добавлены флаги-переключатели
(дополнительно к вводу значения, можно "отметить"
его флагом, как это сделано в Kaspersky Antivirus
4);
- добалены валидаторы ввода (одна
из новых возможностей, которая позволяет дополнительно
контролировать корректность ввода значения и исправлять
ошибки);
- добавлены "кнопочные" редакторы
(Button Editors), которые могут встраиваться в
стандартный редактор значения и таким образом
расширять его функциональные возможности;
- применение/отмена изменений одной
командой (актуально для конфигурационных диалогов
с кнопками "ОК" и "Отмена");
- подсветка измененных значений.
Клавиатурные комбинации, упрощающие
навигацию и выбор значений:
| Комбинация |
Действие |
| Enter |
Подтверждение ввода |
| Escape |
Отмена только что введенной информации при
редактировании (до нажатия Enter) |
| Shift+Escape |
Восстановление ранее сохраненного значения
(отмена подтвержденного изменения) |
| Shift+Up/Down |
Выбор предыдущего/следующего значения списка
(с подтверждением) |
| Alt+Down |
Выпадение списка |
В настоящее время набор элементов представлен
пятью основными классами:
- TBaseItem - абстрактный класс, от которого
наследуются остальные;
- TBaseValue - базовое значение, умеет
принимать "специальные значения" и использовать
валидацию ввода;
- TBaseGroup - группа (служит только для
визуального деления на группы);
- TBaseListValue - класс списка с минимальной
функциональностью (для наследования);
- TListValue - список с расширенными возможностями.
Кроме этого, добавлены три дополнительных класса:
- TBoolValue - элемент выбора булевских
значений;
- TColorValue - список выбора цветов (QColor);
- TTextValue - редактирование расширенного
текста.
Внешние "кнопочные" редакторы
могут встраиваться в стандартный редактор значения
(добавляя справа от кнопки выпадающего списка собственный
элемент редактирования, обычно - кнопку для вызова
диалогового редактора) и таким образом расширять его
функциональные возможности. В настоящее время реализован
дополнительный редактор для ввода числовых значений
(TNumericValue), а также встроенные редакторы
для редактирования булевских, цветовых и текстовых
значений. На основе базовых классов TButtonEditor,
TPopupButtonEditor и TSpinButtonEditor
можно создавать собстенные редакторы и назначать их
методом TBaseValue::setButtonEditor().
Ранее применявшиеся классы для строковых, числовых
и пр. значений с появлением валидаторов
и кнопочных редакторов утратили смысл. Назначив базовому
значению соответствующий валидатор, можно использовать
его по своему усмотрению. Это уменьшает и упрощает
код, увеличивая функциональность. Кроме этого, можно
комбинировать подмножество допустимых значений, если
назначить валидатор списку и включить "свободный"
ввод текста (в этом случае можно будет вводить значения
из списка плюс значения, разрешенные валидатором).
Валидаторы наследуются от класса TValueValidator
(пришлось отказаться от стандартного класса, QValidator,
т.к. он, по моему мнению, слишком перегружен и недостаточно
развит). Единственная функция, которую надо переопределить
в своем валидаторе - это checkValue(QString&
text). Она должна вернуть одно из трех значений:
VR_OK - если текст в порядке, VR_BAD
- если не годится, либо VR_FIXED, если текст
был исправлен (в последнем случае перед возвратом
VR_FIXED вам необходимо также исправить text,
записав туда корректное значение). Деструктор валидатора
вызовется автоматически при удалении значения, к которому
он присоединен (по умолчанию), но при желании можно
использовать один валидатор для нескольких значений
(но тогда удаляйте его в конце вручную).
Все текущие значения параметров можно быстро
сохранить с помощью слота storeSet()
и так же быстро востановить с помощью
restoreSet(). При этом все изменения,
сделанные после сохранения значений, по умолчанию
будут подсвечиваться жирным шрифтом (естественно,
способ подсвечивания можно изменить, переопределив
пару виртуальных методов). Режим подсвечивания управляется
методом setChangeInfo(bool ci).
Что планируется сделать в будущем:
- автоматическое сохранение значений в файл и загрузка
из файла (т.к. в программах часто требуется сохранять
и загружать множество конфигурационных параметров,
а это довольно рутинная работа);
- префиксы и суффиксы (типа "см", "руб.",
"коп.", "$");
- (исследуется) наборы значений (например, для
хранения нескольких конфигураций);
- обновление содержимого "родителя" при
изменении "дочернего" значения и наоборот
(Qt Designer, Delphi);
- (исследуется) прямую связь с переменными
и функциями (изменение параметров в программе
"на лету");
- расширенные редакторы (текстовый, выбор цвета
и т.д.);
- и, конечно, расширение множества значений (цвета,
шрифты и т.д.).
Программировать компонент очень просто.
При разработке был сделан упор на минимум передаваемых
в конструкторах параметров и максимум функциональности.
Смотрите пример, приведенный в файле main.cpp - все
станет понятно.
Начиная с версии 2.1.1, входит в состав библиотеки
CompLib. Последующие
версии компонента будут обновляться в составе данной
библиотеки.
Обновлен: 2.1.1 (9.01.2006)
- добавлена поддержка текстовых значений;
- расширены булевские и цветовые значения;
- добавлены кнопочные редакторы;
- в меню редактора добавлена обция восстановления
значения (как по Shift+Escape);
- ускорены функции установки и проверки значений;
- заполнение выпадающего списка стандартного редактора
выполняется только по требованию, что значительно
ускоряет работу;
- TIntValidator позволяет преобразовывать дробное
значение в целое, а не отклонять, как ранее;
- исправлены некоторые ошибки.
Обновлен: 2.1.0 (25.12.2005)
- теперь компонент доступен как библиотека для Windows
и Linux;
- добавлена поддержка булевских и цветовых значений;
- расширена навигация:
- выбор элементов списка скроллом мыши;
- выбор элементов списка клавишами Shift+Up/Down;
- Shift+Escape восстанавливает сохраненное
значение;
- изменен способ хранения данных в списка (теперь
основан на значениях, а не на индексах, как раньше).
Загрузить:
Обновлен: 2.0.3 (8.13.2005)
- связь со внешними значениями (эксперементально);
- добавлен сигнал ValueChanged;
- исправлена ошибка навигации с клавиатуры.
Обновлен: 2.0.2 (8.11.2005)
- реализованы применение/отмена
изменений;
- подсвечивание измененных значений.
Обновлен: 2.0.1 (2.08.2005)
- реализовано авто-дополнение списков значений;
- добавлен сигнал "ValuePicked";
- по кнопке Escape отменяется весь неподтвержденный
ввод в редакторе значения.
TValueBrowser ©
Racheengel
2004-2005
|
|
|