На этом шаге рассмотрим класс QSvgWidget.
SVG — это формат масштабируемой векторной графики (Scalable Vector Graphics). Он был рекомендован в 2001 году Консорциумом Всемирной паутины W3C (World Wide Web Consortium). Этот формат описывает двумерную векторную графику и анимацию в формате XML, следовательно, содержимое файлов можно изменять в обычном текстовом редакторе. На настоящий момент этот формат получил большое распространение и поддерживается почти всеми Web-браузерами.
Qt для поддержки этого формата предоставляет отдельный модуль QtSvg. А это значит, что в проектных файлах (файлах с расширением pro) нужно не забывать прикреплять этот модуль, для чего достаточно просто добавить строку QT += svg.
Класс для показа SVG-файлов называется QSvgWidget. Загрузить SVG-файл можно либо передав его в конструктор QSvgWidget, либо воспользовавшись его методом load(). Метод load() примечателен тем, что в него можно передавать не только путь к файлу, но и объекты класса QByteArray.
Само изображение создается вспомогательным классом QSvgRenderer. Класс QSvgRenderer можно также использовать для помещения созданных им изображений в объекты QImage и QGlWidget.
Показанный на рис. 1 пример иллюстрирует использование класса QSvgWidget.
Рис.1. Пример векторной анимации
#include <QtGui> #include <QtSvg> int main(int argc, char **argv) { QApplication app(argc, argv); app.setApplicationDisplayName("Векторная анимация"); QSvgWidget svg(":/motion.svg"); //создаем объект класса QSvgWidget //и передаем в его конструктор //SVG-файл motion.svg, //который находится в ресурсах svg.show(); //вызываем метод show(), //чтобы отобразить виджет QObject::connect(svg.renderer(), //соединение сигнала repaintNeeded() SIGNAL(repaintNeeded()),//объекта класса QSvgRenderer &svg, //со слотом repaint() класса SLOT(repaint()) //QSvgWidget нужно для того, чтобы ); //после создания каждого нового //изображения оно отображалось //виджетом QSvgWidget return app.exec(); }
Файлы приложения можно взять здесь.
На следующем шаге рассмотрим понятие анимационного движка в Qt.