ПЗ (1220023), страница 6
Текст из файла (страница 6)
Одним из главных недостатков Visual Studio является отсутствие кросс-платформенности продукта
3.2.2 Qt Creator
Qt Creator –кроссплатформенная свободная IDE для разработки на С, С++ и QML. Разработана Trolltech (Digia) для работы с фреймворком Qt. Включает в себя графический интерфейс отладчика и визуальные средства разработки интерфейса. Позволяет запускать написанное с его помощью ПО в большинстве современных операционных систем путём простой компиляции программы для каждой ОС без изменения исходного кода. Поддерживает большинство функций в современных операционных системах. Включает в себя все основные классы, которые могут потребоваться при разработке прикладного программного обеспечения, начиная от элементов графического интерфейса и заканчивая классами для работы с сетью, базами данных и XML. Qt является полностью объектно–ориентированным, легко расширяемым и поддерживающим ОО программирования. Является свободно распространяемой системой, что значит, отсутствие ограничений на применение Qt в разрабатываемом ПО [29].
Qt позволяет запускать написанное с его помощью ПО в большинстве современных операционных систем путём простой компиляции программы для каждой ОС без изменения исходного кода. Включает в себя все основные классы, которые могут потребоваться при разработке прикладного программного обеспечения, начиная от элементов графического интерфейса и заканчивая классами для работы с сетью, базами данных и XML. Qt является полностью объектно-ориентированным, легко расширяемым и поддерживающим технику компонентного программирования.
Отличительная особенность Qt от других библиотек — использование Meta Object Compiler (MOC) — предварительной системы обработки исходного кода (в общем-то, Qt — это библиотека не для чистого C++, а для его особого наречия, с которого и «переводит» MOC для последующей компиляции любым стандартным C++ компилятором). MOC позволяет во много раз увеличить мощь библиотек, вводя такие понятия, как слоты и сигналы. Кроме того, это позволяет сделать код более лаконичным. Утилита MOC ищет в заголовочных файлах на C++ описания классов, содержащие макрос Q_OBJECT, и создаёт дополнительный исходный файл на C++, содержащий метаобъектный код.
Qt позволяет создавать собственные плагины и размещать их непосредственно в панели визуального редактора. Также существует возможность расширения привычной функциональности виджетов, связанной с размещением их на экране, отображением, перерисовкой при изменении размеров окна.
Qt предоставляет программисту не только удобный набор библиотек классов, но и определённую модель разработки приложений, определённый каркас их структуры. Следование принципам и правилам «хорошего стиля программирования на C++/Qt» существенно снижает частоту таких трудно отлавливаемых ошибок в приложениях, как утечки памяти (memory leaks), необработанные исключения, незакрытые файлы или неосвобождённые дескрипторы ресурсных объектов, чем нередко страдают программы, написанные «на голом C++» без использования библиотеки Qt.
Важным преимуществом Qt является хорошо продуманный, логичный и стройный набор классов, предоставляющий программисту очень высокий уровень абстракции. Благодаря этому программистам, использующим Qt, приходится писать значительно меньше кода, чем это имеет место при использовании, например, библиотеки классов MFC. Сам же код выглядит стройнее и проще, логичнее и понятнее, чем аналогичный по функциональности код MFC или код, написанный с использованием «родного» для X11 тулкита Xt. Его легче поддерживать и развивать.
Qt комплектуется визуальной средой разработки графического интерфейса «Qt Designer», позволяющей создавать диалоги и формы в режиме WYSIWYG. В поставке Qt есть «Qt Linguist» — графическая утилита, позволяющая упростить локализацию и перевод программы на многие языки; и «Qt Assistant» — справочная система Qt, упрощающая работу с документацией по библиотеке, а также позволяющая создавать кросс-платформенную справку для разрабатываемого на основе Qt ПО. Начиная с версии 4.5.0 в комплект Qt включена среда разработки «Qt Creator», которая включает в себя редактор кода, справку, графические средства «Qt Designer» и возможность отладки приложений. «Qt Creator» может использовать GCC или Microsoft VC++ в качестве компилятора и GDB в качестве отладчика. Для Windows версий библиотека комплектуется компилятором, заголовочными и объектными файлами MinGW.
На основе выше изложенного для написания программы воспользуемся средой разработки программного обеспечения Qt Creator.
3.2.3 Разработка приложения для отображения цветовых координат
Исходя из поставленных задач, разработаем приложение для визуализации цветовых координат RGB, используя для этого Qt Creator.Вид приложения представлен на рисунке 18.
Для реализации поставленной задачи, воспользуемся следующими виджетами: QlineEdit, QpushButton, QgraphicView.
Виджет QLineEdit представляет собой редактор однострочного текста.
Редактор строки позволяет пользователю вводить и редактировать одну строку простого текста с набором полезных функций редактирования, включая отмену, повтор, вырезание, вставку, а также перетаскивание с помощью механизма drag-and-drop.
Рисунок 21 – Внешний вид приложения
Изменяя свойства echoMode() редактора, можно использовать его в качестве поля "только-для-записи" и для ввода паролей.
Длина текста может быть ограничена с помощью maxLength(). Для текста можно задать условия, используя validator() или inputMask(), либо оба их.
Bзменять текст с помощью setText() или insert(). Текст может быть получен с помощью text(); отображаемый текст (может отличаться от содержащегося текста, см. EchoMode) может быть получен с помощью displayText(). Текст может быть выделен с помощью setSelection() или selectAll(), а выделенный текст может быть вырезан с помощью cut(), скопирован с помощью copy() и вставлен с помощью paste(). Текст может быть выровнен с помощью setAlignment().
При изменении текста испускается сигнал textChanged(); при изменении текста с помощью setText(), испускается сигнал textEdited(); при перемещении курсора испускается сигнал cursorPositionChanged(); а при нажатии клавиш Return или Enter испускается сигнал returnPressed().
При окончании редактирования (редактор теряет фокус или нажата клавиша Return/Enter) испускается сигнал editingFinished().
Tсли установлено условие для текста (validator()), то сигналы returnPressed()/editingFinished() испускаются только в случае, если условие для текста возвращает QValidator::Acceptable.
По умолчанию, QLineEdits имеет рамку, определенную Windows или или стилем Motif; это может быть изменено с помощью setFrame(false).
Виджет QPushButton представляет собой командную кнопку.
Кнопка, или командная кнопка, является, по всей видимости, наиболее часто используемым виджетом в любом графическом пользовательском интерфейсе. Нажатие (щелчок) кнопки указывает компьютеру, что необходимо выполнить действие или ответить на вопрос. Типичные кнопки - это OK, Apply (Применить), Cancel (Отменить), Close (Закрыть), Yes (Да), No (Нет) и Help (Справка).
Командная кнопка, обычно, прямоугольна и отображает текстовый ярлык описывающий ее действие. Подчеркнутый символ текстового ярлыка (предваряемый в тексте амперсандом) указывает горячую клавишу, например:
QPushButton *pb = new QPushButton("&Download", this);
Кнопки отображают текстовую метку и, при желании, небольшую иконку, которые могут быть установлены в конструкторе и позднее изменены с помощью setText() и setIcon(). Если кнопка недоступна, то текст и иконка будут отображаться в соответствии со стилем GUI чтобы показать, что кнопка "недоступна".
Кнопка испускает сигнал clicked() когда активизируется мышью, клавишей пробела или сокрыщенной клавишей. Соединить данный сигнал для обработки нажатия кнопки. Кнопка также предоставляет другие, реже испольуемые сигналы, например, pressed() и released().
Командные кнопки в диалогах по умолчанию являются кнопками автоумолчания, т.е. они становятся кнопками по умолчанию автоматически при получении фокуса ввода клавиатуры. Кнопка по умолчанию - это кнопка, которая активизируется когда пользователь нажимает клавишу Enter или Return в диалоге. Вы можете изменить данное свойство используя setAutoDefault(). Обратите внимание, что кнопки автоумолчания резервируют небольшое дополнительное пространство которое необходимо для рисования кнопки по умолчанию. Если Вы не хотите занимать место вокруг кнопок, вызовите setAutoDefault(false).
Будучи таким важным элементом, кнопка за прошлое десятиление была сильно усовершенствована чтобы вместить в себя много разновидностей. Стиль Microsoft предоставляет, приблизительно, десять параметров кнопок в Windows и подразумевается множество их комбинаций.
Наиболее важные режимы и состояния кнопки:
-
доступна или нет (серая, недоступная);
-
стандартная кнопка, западающая кнопка или кнопка меню;
-
включена или выключена (только для западающих кнопок);
-
кнопка по умолчанию или нормальная. Кнопка по умолчанию может быть "кликнута" либо активизирована клавишами Enter или Return;
-
автоповторение включено или нет;
-
нажата или нет.
Как правило, кнопку используют чтобы заставить приложение или диалог выполненить действие по щелчку пользователя на ней (такие как Apply (Применить), Cancel (Отменить), Close (Закрыть) и Help (Справка)) или когда виджет, как предполагается, имеет широкую прямоугольную форму и надпись. Маленькие, обычно квадратные кнопки, не выполняющие действий, но изменяющие состояние окна (такие как кнопки в правом верхнем углу QFileDialog) не являются командными кнопками, а являются кнопками инструментов. Qt для этих кнопок предоставляет специальный класс (QToolButton).
Если есть необходимость в кнопке с поведением подобным поведению фиксируемой кнопке (setCheckable()) или подобной кнопке с автоповторением сигнала активации пока она нажата, подобно стрелке в полосе прокрутки, то командная кнопка - это, вероятно, не то, что Вам нужно. Когда есть сомнения - используйте кнопку инструмента.
Одна из разновидностей командной кнопки - кнопка меню. Такие кнопки могут предоставить как одну команду, так и несколько, когда по ним щелкают, выпадает меню, состоящее из нескольких команд на выбор. Чтобы связать выпадающее меню с командной кнопкой, используйте метод setMenu().
Класс QGraphicsView предоставляет виджет для отображения содержимого QGraphicsScene.
QGraphicsView отображает содержимое QGraphicsScene в прокручиваемой области. За подробностями о создании сцены с геометрическими элементами обращайтесь к документации по QGraphicsScene. QGraphicsView является частьюкаркаса графического представления.
Для отображения сцены необходимо начать с создания объекта QGraphicsView, передав адрес сцены, которую вы хотите отобразить, в его конструктор. Также може вызвать setScene() чтобы установить сцену позже. После того как произойдет вызов show(), вид по умолчанию переместится в центр сцены и отобразит все видимые в данной точке элементы. Например:
QGraphicsScene scene;
scene.addText("Hello, world!");
QGraphicsView view(&scene);
view.show();
Так же возможно перейти в любую позицию сцены используя полосы прокрутки или вызвав centerOn(). После передачи точки в centerOn(), QGraphicsView переместит область просмотра таким образом, чтобы обеспечить чтобы указанная точка находилась в центре вида. Для перемещения к QGraphicsItem предоставлена перегруженная функция, в этом случае QGraphicsView обеспечит чтобы центр элемента находился в центре вида. Если вам необходимо обеспечить видимость определённой области (но не обязательно в центре), вы можете вызвать ensureVisible().
QGraphicsView может быть использован как для отображения целой сцены, так и её части. По умолчанию область отображения определяется автоматически, когда вид отображается в первый раз (с помощью вызова QGraphicsScene::itemsBoundingRect()). Чтобы установить собственную область отображения, вы можете вызвать setSceneRect(). Это настроит диапазоны полос прокрутки соответствующим образом. Заметим, что хотя сцена поддерживает неограниченный размер, диапазон полос прокрутки никогда не превысит диапазон целых чисел (INT_MIN, INT_MAX). Когда сцена больше чем значения полос прокрутки, вы можете выбрать использования translate() для перемещения по сцене.
QGraphicsView отображает сцену вызывая render(). По умолчанию элементы отрисовываются в области отображения, используя обычный QPainter и подсказки отображения по умолчанию. Чтобы изменить подсказки отображения по умолчанию, которые QGraphicsView передаёт QPainter при отрисовке элементов, вы можете вызвать setRenderHints().
По умолчанию QGraphicsView предоставляет обычный QWidget для области отображения. Вы можете получить доступ к виджету, вызвав viewport(), или вы можете заменить его, вызвав setViewport(). Для отображения с использованием OpenGL просто вызовите setViewport(new QGLWidget). QGraphicsView становится владельцем виджета области отображения.
QGraphicsView поддерживает аффинные преобразования, используя QTransform. Вы можете или передать матрицу функции setTransform(), или вы можете вызвать одну из вспомогательных функций rotate(), scale(), translate() или shear(). Наиболее распространёнными преобразованиями являются масштабирование, используемое при реализации увеличения, и поворот. QGraphicsView фиксирует центр вида при преобразовании.











