Настройка виджетов Qt
Настройка виджетов Qt
В некоторых случаях мы обнаруживаем необходимость в более специализированной настройке виджета Qt по сравнению с той, которую можно обеспечить путем установки его свойств в Qt Designer или с помощью вызова его функций. Простое и прямое решение заключается в создании подкласса соответствующего виджетного класса и адаптации его под наши требования.
Рис. 5.1. Виджет HexSpinBox.
Чтобы показать, как это делается, в данном разделе мы разработаем шестнадцатеричный наборный счетчик. Наборный счетчик QSpinBox поддерживает только десятичные целые числа, но путем создания подкласса достаточно легко можно заставить его принимать и отображать шестнадцатеричные значения.
01 #ifndef HEXSPINBOX_H
02 #define HEXSPINBOX_H
03 #include <QSpinBox>
04 class QRegExpValidator;
05 class HexSpinBox : public QSpinBox
06 {
07 Q_OBJECT
08 public:
09 HexSpinBox(QWidget *parent = 0);
10 protected:
11 QValidator::State validate(QString &text, int &pos) const;
12 int valueFromText(const QString &text) const;
13 QString textFromValue(int value) const;
14 private:
15 QRegExpValidator *validator;
16 };
17 #endif
Шестнадцатеричный наборный счетчик HexSpinBox наследует большую часть функциональности от QSpinBox. Он содержит обычный конструктор и переопределяет три виртуальные функции класса QSpinBox.
01 #include <QtGui>
02 #include "hexspinbox.h"
03 HexSpinBox::HexSpinBox(QWidget *parent)
04 : QSpinBox(parent)
05 {
06 setRange(0, 255);
07 validator = new QRegExpValidator(QRegExp("[0-9A-Fa-f]{1,8}"), this);
08 }
Мы устанавливаем по умолчанию диапазон от 0 до 255 (от 0x00 до 0xFF), который лучше соответствует шестнадцатеричному наборному счетчику, чем диапазон от 0 до 99, принимаемый по умолчанию в QSpinBox.
Пользователь может модифицировать текущее значение наборного счетчика, щелкая по верхней или нижней стрелке или вводя значения в строке редактирования наборного счетчика. В последнем случае мы хотим, чтобы пользователь мог вводить только правильные шестнадцатеричные числа. Для достижения этого мы используем QRegExpValidator, который принимает один или несколько символов со значениями каждого символа в диапазонах от «0» до «9», от «А» до «F» или от «а» до «f».
09 QValidator::State HexSpinBox::validate(QString &text, int &pos) const
10 {
11 return validator->validate(text, pos);
12 }
Эта функция вызывается в QSpinBox для проверки допустимости введенного текста. Результат может иметь одно из трех значений: Invalid (текст не соответствует регулярному выражению), Intermediate (текст, вероятно, является частью допустимого значения) и Acceptable (текст допустим). QRegExpValidator имеет подходящую функцию validate(), поэтому мы просто возвращаем результат ее вызова. Теоретически следует возвращать Invalid или Intermediate для значений, лежащих вне диапазона наборного счетчика, но QSpinBox достаточно «умен» и может самостоятельно отследить эту ситуацию.
13 QString HexSpinBox::textFromValue(int value) const
14 {
15 return QString::number(value, 16).toUpper();
16 }
Функция textFromValue() преобразует целое число в строку. QSpinBox вызывает ее для обновления строки редактирования в наборном счетчике, когда пользователь нажимает клавиши верхней или нижней стрелки наборного счетчика. Мы используем статическую функцию QString::number(), задавая 16 в качестве второго аргумента для преобразования значения в представленное в нижнем регистре шестнадцатеричное число, и вызываем функцию QString::toUpper() для преобразования результата в верхний регистр.
17 int HexSpinBox::valueFromText(const QString &text) const
18 {
19 bool ok;
20 return text.toInt(&ok, 16);
21 }
Функция valueFromText() выполняет обратное преобразование из строки в целое число. Она вызывается в QSpinBox, когда пользователь вводит значение в строку редактирования наборного счетчика и нажимает клавишу Enter. Мы используем функцию QString::toInt() для попытки преобразования текущего текстового значения (возвращаемого QSpinBox::text()) в целое число, вновь используя 16 в качестве базы. Если строка не является правильным шестнадцатеричным числом, ok устанавливается на значение false и toInt() возвращает 0. Здесь нет необходимости рассматривать такую возможность, поскольку контролирующая функция (validator) позволяет вводить только правильные шестнадцатеричные значения. Вместо передачи адреса переменной ok мы могли бы задать нулевой указатель в первом аргументе функции toInt().
Этим мы завершили создание шестнадцатеричного наборного счетчика. Настройка других виджетов Qt осуществляется по тому же образцу: подобрать подходящий виджет Qt, создать его подкласс и переопределить несколько виртуальных функций для изменения режима его работы.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Настройка
Настройка Самое время обратиться к настройкам агрегатора (рис. 7.13). Рисунок 7.13. Первая, основная страница настроекНа первой закладке кроме установки интерфейса можно выбрать стартовую страницу для отображения. Вместо главной страницы при начальной загрузке можно
Настройка CMS
Настройка CMS Грамотная настройка CMS в значительной степени облегчает труд оптимизатора. С помощью системы управления контентом можно при создании карточки товара автоматически вносить нужные ключевые слова в метатеги и тег itle, генерируя уникальные описания.
Настройка INN
Настройка INN Настройка INN предполагает установку большого количества опций в различных конфигурационных файлах. В пакете, предназначенном для инсталляции, указаны такие значения опций, которые практически обеспечивают функционирование сервера. Вам остается лишь
Настройка SSH
Настройка SSH Из протоколов, обеспечивающих защиту передаваемых данных, среди пользователей Linux наиболее популярен SSH (Secure Shell — защищенная оболочка). Данные, предназначенные для передачи по сети посредством данного протокола, шифруются. Очевидно, что шифрованные данные
5.2.1. Настройка The Bat!
5.2.1. Настройка The Bat! Начну с The Bat! – моего любимого почтового клиента для Windows. Примечание Я понимаю, что использовать в таком режиме The Bat! не вполне не рационально – ведь код этой программы закрыт. И хотя 100-процентную гарантию никто дать не может, "черных дыр" в ней, вроде бы,
Настройка
Настройка Если вы запускаете Microsoft Outlook на компьютере впервые, то увидите такое сообщение (рис. 4.1). Рис. 4.1. Вас приветствует Outlook Нажимайте кнопку Далее. Появится следующее окно (рис. 4.2).У вас уже есть свой почтовый адрес? Если нет, то нужно быстренько сходить на любой
Компоновка виджетов
Компоновка виджетов В данном разделе мы создадим небольшое приложение, которое демонстрирует применение менеджеров компоновки для размещения виджетов в окне и использование сигналов и слотов для синхронизации работы двух виджетов. Приложение предлагает пользователю
Стили виджетов
Стили виджетов Показанные нами ранее экраны были взяты из системы Linux, но приложения Qt будут выглядеть привычно для любой поддерживаемой платформы. Qt имитирует изобразительные средства используемой платформы, а не делает попытки все представить средствами, принятыми в
Встроенные классы виджетов и диалоговых окон
Встроенные классы виджетов и диалоговых окон Qt содержит большой набор встроенных виджетов и стандартных диалоговых окон, с помощью которых можно реализовать большинство возможных ситуаций. В данном разделе мы представим изображения экранов почти со всеми из них.
Глава 5. Создание пользовательских виджетов
Глава 5. Создание пользовательских виджетов В данной главе объясняются способы создания пользовательских виджетов с помощью средств разработки Qt. Пользовательские виджеты могут создаваться путем определения подкласса существующего виджета Qt или путем определения
Компоновка виджетов на форме
Компоновка виджетов на форме Существует три основных способа управления компоновкой дочерних виджетов формы: абсолютное позиционирование, ручная компоновка и применение менеджеров компоновки. Мы рассмотрим по очереди каждый из этих методов, используя в качестве
Вышло приложение Status Board — самый лучший центр виджетов для iOS Михаил Карпов
Вышло приложение Status Board — самый лучший центр виджетов для iOS Михаил Карпов Опубликовано 10 апреля 2013 Компания Panic выпустила очень интересное приложение для iPad. Оно стоит 10 долларов и позволяет обзавестись тем, чего в iOS до сих пор не было:
4.5.2. Настройка виджетов
4.5.2. Настройка виджетов Обратите внимание, что если навести указатель мыши на некоторые виджеты, то на их поверхности появляется миниатюрный значок /, который подсказывает нам, что виджет является настраиваемым. Щелчок мыши по этому значку переворачивает окно виджета, в