Шаг 237.
Библиотека Qt.
Класс QSvgWidget

    На этом шаге рассмотрим класс 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.




Предыдущий шаг Содержание Следующий шаг