Читаем QT 4: программирование GUI на С++ полностью

Функция valueFromText() выполняет обратное преобразование из строки в целое число. Она вызывается в QSpinBox, когда пользователь вводит значение в строку редактирования наборного счетчика и нажимает клавишу Enter. Мы используем функцию QString::toInt() для попытки преобразования текущего текстового значения (возвращаемого QSpinBox::text()) в целое число, вновь используя 16 в качестве базы. Если строка не является правильным шестнадцатеричным числом, ok устанавливается на значение false и toInt() возвращает 0. Здесь нет необходимости рассматривать такую возможность, поскольку контролирующая функция (validator) позволяет вводить только правильные шестнадцатеричные значения. Вместо передачи адреса переменной ok мы могли бы задать нулевой указатель в первом аргументе функции toInt().

Этим мы завершили создание шестнадцатеричного наборного счетчика. Настройка других виджетов Qt осуществляется по тому же образцу: подобрать подходящий виджет Qt, создать его подкласс и переопределить несколько виртуальных функций для изменения режима его работы.

<p>Создание подкласса QWidget</p>

Многие пользовательские виджеты являются простой комбинацией существующих виджетов, либо встроенных в Qt, либо других пользовательских виджетов (таких, как HexSpinBox). Если пользовательские виджеты строятся на основе существующих виджетов, то они, как правило, могут разрабатываться в Qt Designer.

• создайте новую форму, используя шаблон «Widget» (виджет);

• добавьте в эту форму необходимые виджеты и затем расположите их соответствующим образом;

• установите соединения сигналов и слотов;

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

Естественно, комбинация существующих виджетов может быть также полностью запрограммирована вручную. При любом подходе полученный класс наследует непосредственно QWidget.

Если виджет не имеет своих собственных сигналов и слотов и не переопределяет никакую виртуальную функцию, можно просто собрать виджет из существующих виджетов, не создавая подкласс. Этим методом мы пользовались в главе 1 для создания приложения Age с применением QWidget, QSpinBox и QSlider. Даже в этом случае мы могли бы легко определить подкласс QWidget и в его конструкторе создать QSpinBox и QSlider.

Когда под рукой нет подходящих виджетов Qt и когда нельзя получить желаемый результат, комбинируя и адаптируя существующие виджеты, мы можем все же создать требуемый виджет. Это достигается путем создания подкласса QWidget и переопределением обработчиков некоторых событий, связанных с рисованием виджета и реагированием на щелчки мышки. При таком подходе мы свободно можем определять и управлять как внешним видом, так и режимом работы нашего виджета. Такие встроенные в Qt виджеты, как QLabel, QPushButton и QTableWidget, реализованы именно так. Если бы их не было в Qt, все же можно было бы создать их самостоятельно при помощи предусмотренных в классе QWidget открытых функций, обеспечивающих полную независимость от платформы.

Для демонстрации данного подхода при написании пользовательского виджета мы создадим виджет IconEditor, показанный на рис. 5.2. Виджет IconEditor может использоваться в программе редактирования пиктограмм.

Рис. 5.2. Виджет IconEditor.

Сначала рассмотрим заголовочный файл.

01 #ifndef ICONEDITOR_H

02 #define ICONEDITOR_H

03 #include

04 #include

05 #include

06 class IconEditor : public QWidget

07 {

08 Q_OBJECT

09 Q_PROPERTY(QColor penColor READ penColor WRITE setPenColor)

10 Q_PROPERTY(QImage iconImage READ iconImage WRITE setIconImage)

11 Q_PROPERTY(int zoomFactor READ zoomFactor WRITE setZoomFactor)

12 public:

13 IconEditor(QWidget *parent = 0);

14 void setPenColor(const QColor &newColor);

15 QColor penColor() const { return curColor; }

16 void setIconImage(const QImage &newImage);

17 QImage iconImage() const { return image; }

18 QSize sizeHint() const;

19 void setZoomFactor(int newZoom);

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных
C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных