Home · All Classes · Main Classes · Grouped Classes · Modules · Functions

Описание Класса QGLWidget
[модуль QtOpenGL]

Класс QGLWidget виджета для вывода графики, реализующий функции библиотеки OpenGL. Далее...

#include <QGLWidget>

Наследует QWidget.

Открытые Функции

Открытые Слоты

Статические Открыте Члены

Защищенные Функции

Дополнительные Унаследованные Члены


Подробное Описание

Класс QGLWidget виджета для вывода графики, реализующий функции библиотеки OpenGL.

QGLWidget обеспечивает вывод OpenGL графики, интегрированной в Qt приложения. Это довольно просто в использовании. Вы наследуете свой класс и используете его как любой другой QWidget, но для рисования используется не QPainter или другие классы, а стандартные комманды OpenGL.

OpenGL - торговая марка Silicon Graphics, Inc. в США и других странах.

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

Класс, наследник QGLWidget, может выглядеть так:

    class MyGLDrawer : public QGLWidget
    {
        Q_OBJECT        // необходим, если предполагается использование механизма сигналов/слотов

    public:
        MyGLDrawer(QWidget *parent)
            : QGLWidget(parent) {}

    protected:

        void initializeGL()
        {
            // Устанавки контекста вывода, списков, и др:
            ...
            glClearColor(0.0, 0.0, 0.0, 0.0);
            glEnable(GL_DEPTH_TEST);
            ...
        }

        void resizeGL(int w, int h)
        {
            // Установки области вывода, проекции и др.:
            glViewport(0, 0, (GLint)w, (GLint)h);
            ...
            glFrustum(...);
            ...
        }

        void paintGL()
        {
            // прорисовка сцены:
            ...
            glRotatef(...);
            glMaterialfv(...);
            glBegin(GL_QUADS);
            glVertex3f(...);
            glVertex3f(...);
            ...
            glEnd();
            ...
        }

    };

Если надо переключить перерисовку в другое место, то paintGL() (наиболее простой способ - использование таймера для создания анимации), нужно вызватьupdateGL() функцию.

Виджет выводит в текущий контекст, когда вызываются paintGL(), resizeGL(), или initializeGL(). Если вам нужно вызвать стандартные OpenGL API функции из других мест, (таких как, конструктор класса виджета или в вашей собственной функции порисовки) то надо сперва вызвать makeCurrent() first.

QGLWidget содержит финкции для запроса нового формата вывода и вы можете создать виджет с контекстом вывода, отличным от созданного контекта "по умолчанию".

Вы также можете распределить дисплейные списки между QGLWidget виджетами (см. документацию по конструкторам QGLWidget).

Оверлеи

QGLWidget создает GL оверлейный контекст, как дполнение к нормальному, если оверлеи поддерживаются системой.

Если вы хотите использовать оверлеи, то это необходимо указать в формате. (Замечание: Оверлей должен быть запрошен форматом контекста в конструкторе QGLWidget). В наследнике класса должны быть переопределены следующие виртуальные функции (не обязательно все):

Эти методы работают также как и нормальные, paintGL() и др. функции, за исключением того, что они могут быть вызваны только тогда, когда уставлен оверлейный контекст текущим. Вы можете сделать оверлейный контекст текущим, используя makeOverlayCurrent(), и получить непосредственный доступ к контексту вызовом overlayContext().

На X сервере по умолчанию присутствует оверлей, в не-GL Qt окнах также могут использоваться оверлеи.


Описание Функций

QGLWidget::QGLWidget ( QWidget * parent = 0, const QGLWidget * shareWidget = 0, Qt::WFlags f = 0 )

Конструктор OpenGL виджета с указателем на родительский parent виджет.

Используется формат "по умолчанию". При создании виджета возвратится ошибка, если в системе нет поддержки OpenGL.

Родитель класса parent и переменная флагов, f, аргументы конструктора QWidget.

Если параметр shareWidget имеет тип QGLWidget, то этот виджет будет разделять дисплейные списки OpenGL с shareWidget. Если этот виджет и shareWidget различных форматов, списки могут быть не разделены. Но вы можете проверить успешность подключения разделяемых дисплейных списков вызовом isSharing().

Инициализация OpenGL режима прорисовки, и др. установки должны быть переопределены в initializeGL() функции, не рекомендуется делать установки в конструкторе QGLWidget вашего класса.

См. также QGLFormat::defaultFormat().

QGLWidget::QGLWidget ( QGLContext * context, QWidget * parent = 0, const QGLWidget * shareWidget = 0, Qt::WFlags f = 0 )

Конструктор OpenGL виджета с указателем на родительский parent виджет.

Переменная context указатель на QGLContext контекст для вышего OpenGL виджета. Вы можете указать собственный (пользовательский) QGLContext класс.

При создании виджета возвратится ошибка, если в системе нет поддержки OpenGL.

Родитель класса parent и переменная флагов, f, аргументы конструктора QWidget.

Если параметр shareWidget имеет тип QGLWidget, то этот виджет будет разделять дисплейные списки OpenGL с shareWidget. Если этот виджет и shareWidget различных форматов, списки могут быть не разделены. Но вы можете проверить успешность подключения разделяемых дисплейных списков вызовом isSharing().

Инициализация OpenGL режима прорисовки, и др. установки должны быть переопределены в initializeGL() функции, не рекомендуется делать установки в конструкторе QGLWidget вашего класса.

См. также QGLFormat::defaultFormat() и isValid().

QGLWidget::QGLWidget ( const QGLFormat & format, QWidget * parent = 0, const QGLWidget * shareWidget = 0, Qt::WFlags f = 0 )

Конструктор OpenGL виджета с указателем на родительский parent виджет.

Аргумент formatопределяет желаемые опции контекста вывода. Если система OpenGL/Window не может удовлетворить все запрашиваемым в format опциям, то используются наиболее близкие к ним. После создания в переменной format() возвращаются установленный формат контекста.

При создании виджета возвратится ошибка, если в системе нет поддержки OpenGL.

Родитель класса parent и переменная флагов, f, аргументы конструктора QWidget.

Если параметр shareWidget имеет тип QGLWidget, то этот виджет будет разделять дисплейные списки OpenGL с shareWidget. Если этот виджет и shareWidget различных форматов, списки могут быть не разделены. Но вы можете проверить успешность подключения разделяемых дисплейных списков вызовом isSharing().

Инициализация OpenGL режима прорисовки, и др. установки должны быть переопределены в initializeGL() функции, не рекомендуется делать установки в конструкторе QGLWidget вашего класса.

См. также QGLFormat::defaultFormat() и isValid().

QGLWidget::~QGLWidget ()

Деструкторы виджета.

bool QGLWidget::autoBufferSwap () const   [protected]

Возвращает true если виджет автоматически производит свопинг GL буфера; иначе возвращает false.

См. также setAutoBufferSwap().

GLuint QGLWidget::bindTexture ( const QImage & image, GLenum target = GL_TEXTURE_2D, GLint format = GL_RGBA8 )

Вызывается QGLContext:::bindTexture(image, target, format) для текущего контекста.

См. также deleteTexture().

GLuint QGLWidget::bindTexture ( const QPixmap & pixmap, GLenum target = GL_TEXTURE_2D, GLint format = GL_RGBA8 )

Эта перегруженная функция введена для удобства. Используется наравне с вышеприведенной функцией.

Вызывается QGLContext:::bindTexture(pixmap, target, format) для текущего контекста.

См. также deleteTexture().

GLuint QGLWidget::bindTexture ( const QString & fileName )

Эта перегруженная функция введена для удобства. Используется наравне с вышеприведенной функцией.

Вызывается QGLContext::bindTexture(fileName) для текущего контекста.

См. также deleteTexture().

const QGLColormap & QGLWidget::colormap () const

Возвращает палитру для данного виджета.

Обычно это виджеты верхнего уровня, которые могут использовать различные палитры. Для потомков, функция возвратит палитру виджета верхнего уровня данного потомка.

Если палитра для виждета не установлена,QColormap то функция ничего не возвращает.

См. также setColormap().

const QGLContext * QGLWidget::context () const

Вощает контекст данного виджета.

Возможны ситуации, когда контекст неверен (см. isValid()), например, система не поддерживает атрибуты формата, что сообщается при сождании контекста.

QImage QGLWidget::convertToGLFormat ( const QImage & img )   [static]

Переводит изобажениеimg в unnamed-формат необходимый для OpenGL фунуций таких как glTexImage2D(). Возвращаетe изображение не испоьзуемое какQImage, но QImage::width(), QImage::height() и QImage::bits() могут применяться для работы с OpenGL.

void QGLWidget::deleteTexture ( GLuint id )

Вызыватеся QGLContext::deleteTexture(id) для текущего контекста.

См. также bindTexture().

void QGLWidget::doneCurrent ()

Делает GL контекст текущеим. Обычно вам нет необходимости вызываит эту функцию; QGLContext вызывает при неоходимости. Однако, это может понадобиться в многопотоковых средах.

bool QGLWidget::doubleBuffer () const

Возвращает true, если вывод производится с использованием двойной буферизации; иначе возвращается false.

См. также QGLFormat::doubleBuffer().

int QGLWidget::fontDisplayListBase ( const QFont & fnt, int listBase = 2000 )   [protected]

Возвращает индекс первого дисплейного списка, сгенерированного для шрифтаr fnt. listBase задает базовое значение для дисплейных списков шрифтов. Значение по умолчанию 2000.

QGLFormat QGLWidget::format () const

Возвращает формат контекста вывода GL.

См. также setFormat().

void QGLWidget::glDraw ()   [virtual protected]

Производит вывод виртуальной функции paintGL().

Контекст вывода виджета становится текущим и initializeGL() будет вызвана в том случае, если до этого еще не была вызвана.

void QGLWidget::glInit ()   [virtual protected]

Иниуиализация OpenGL контекста для данного выдижета. Вызывается виртуальная функция initializeGL().

QImage QGLWidget::grabFrameBuffer ( bool withAlpha = false )

Возвращает изображение, снятое с переднего буфера. Если withAlpha true, то alpha канал включен.

В звисимости от вашего аппаратного обеспечения, вы можете выбрать цветовой буфер для снятия изображения с помощью glReadBuffer(), эту функцию надо вызвать заранее.

void QGLWidget::initializeGL ()   [virtual protected]

Эта виртуальная функция вызывается до первого вызова paintGL() или resizeGL(), и вызывется всякий раз, когда у виджета меняется контекст вывода QGLContext. Переопределяется в подклассе.

Она должна устанавливать флаги OpenGL контекста вывода, определять дисплейные списки, и т.д.

There is no need to call makeCurrent() because this has already been done when this function is called.

void QGLWidget::initializeOverlayGL ()   [virtual protected]

Виртуальная функция, аналог initializeGL() для операций с оверлейными контекстами. Вызывается initializeOverlayGL() один раз, перед первым вызывом paintOverlayGL() или resizeOverlayGL(). Переопределяется в подклассе.

Она должна устанавливать флаги OpenGL контекста вывода, определять дисплейные списки, и т.д. для оверлейного контекста.

Не нуждается в вызове makeOverlayCurrent().

bool QGLWidget::isSharing () const

Возвращает true, если контекст GL виджета используется наравне с другими контекстами данного виджета, иначе возвращает false. GL ситема может возвратить ошибку, если, например, два подключаемых контекста QGLWidgets имеют различные форматы.

См. также format().

bool QGLWidget::isValid () const

Возвращает true, если у виджета верный контекст вывода; иначе возвращает false. Функция возвращает false, когда например, формат виджета неверен, что может произойти при отсутствии в системе поддержки OpenGL.

void QGLWidget::makeCurrent ()

Делает этот виджет текущим для OpenGL операций, то есть контекст вывода виджета становится текущим OpenGL контекстом вывода.

void QGLWidget::makeOverlayCurrent ()

Делает оверлейный контекст данного виджета текущим. Используется, если вам необходимо подавать OpenGL команды в оверлейный контекст не из функций initializeOverlayGL(), resizeOverlayGL(), и paintOverlayGL().

Ничего не изменяет, если виджет не оверлейный.

См. также makeCurrent().

const QGLContext * QGLWidget::overlayContext () const

Возвращает оверлейный контекст данного виджета, или 0 если виджет не имеет оверлеев.

См. также context().

void QGLWidget::paintEvent ( QPaintEvent * event )   [virtual protected]

Указатель на событие находтся в event параметре. Причиной может явиться вызов виртуальной функции paintGL().

Контекст вывода виджета становится текущим контекстом и initializeGL() будет вызвана, если до этого она еще не была вызвана.

Переопределите QWidget.

void QGLWidget::paintGL ()   [virtual protected]

Эта виртуальная функция вызывается, когда виджет нуждается в перерисовке. Переопределяется в подклассе.

Не нужно вызывать функцию makeCurrent(), потому что она вызывается автоматически.

void QGLWidget::paintOverlayGL ()   [virtual protected]

Виртуальная функция, аналог paintGL() для операций с оверлейными контекстами. Функция paintOverlayGL() будет вызвана, когда виджету необходима перерисовка. Переопределяется в подклассе.

Не нужно вызывать функцию makeOverlayCurrent(), потому что она вызывается автоматически.

void QGLWidget::qglClearColor ( const QColor & c ) const

Устанавливает цвет заполнения в режиме OpenGL. Вызывается glClearColor (в RGBA режиме) или glClearIndex (в режиме цветовых индексов) с аргументом цвета c. Применяется для текущего контекста GL.

См. также qglColor(), QGLContext::currentContext(), и QColor.

void QGLWidget::qglColor ( const QColor & c ) const

Устанавливает цвет рисования в режиме OpenGL. Вызывается glColor4 (в RGBA режиме) или glIndex (в режиме цветовых индексов) с аргументом цвета c. Применяется для текущего контекста GL.

См. также qglClearColor(), QGLContext::currentContext(), и QColor.

QPixmap QGLWidget::renderPixmap ( int w = 0, int h = 0, bool useContext = false )

Выводит текущую сцену на изображение и возвращает его.

Вы можете использовать в обоих режимах: видимом и невидимом QGLWidgets.

Данная функция создает изображене и временный QGLContext для вывода. Также вызываются initializeGL(), resizeGL(), и paintGL() для контекста. И в конце предыдущий контекст вывода восстанавливается.

Размер изображения w пикселей ширины и h пикселей высоты, если один из этих параметров не установлен, то используется размер виджета.

Есди useContext установлен в true, то функция пытается использовать существующий контекст вывода для создания изображения. По умолчанию параметр равен false. Вы можете использовать значение true, если осознаете сопряженный c этим риск.

Оверлеи не могут быть выведены в изображение.

Если контекст вывода GL и изобрадения имеют различную глубину, то результат может явиться для вас сюриризом.

Замечание: создание дисплейных спсков, модификация проекции ит.д. должны быть осуществлены внутри initializeGL(). Если этого не сделать, то полученный контекст QGLContext будет не иницализоанным должным образом, и в результате изображение модет быть незаконченным/поврежденным.

void QGLWidget::renderText ( int x, int y, const QString & str, const QFont & fnt = QFont(), int listBase = 2000 )

Вывод строки str в GL контекст данного виджета.

x и y определяют координаты окна, относительно левого верхнего угла окна. Если fnt не задан, то будет использован текущий шрифт приложения. Для изменения цвета текстя можно воспользоваться glColor() (или the qglColor() функцией-аналогом ), до вывода текста renderText(). Замечание; при использовании режима освещения (константа GL_LIGHTING), строка будет цветом отличаться от заданного выми. Для избежания этого, необходимо выключить освещение перед вызовом renderText().

listBase определяет индекс первого дисплейного списка, генерируемого функцией. Значение по умолчанию 2000. 256 может быть создано, один для каждого из 256 символов вывводимой строки. Если некоторые из шрифтов использовались другим виджетом, то ранее созданный список будет продолжен. You would normally not have to change this value unless you are using lists in the same range. Списки уничтожаются вместе с виджетом.

void QGLWidget::renderText ( double x, double y, double z, const QString & str, const QFont & fnt = QFont(), int listBase = 2000 )

Эта перегруженная функция введена для удобства. Используется наравне с вышеприведенной функцией.

x, y и z определяют координаты в сцене или объекте, в соответствии с текущими проекцией и модельными матрицами. Можно использовать для сопровождения модели текстовой меткой, которая будет подвержена трансформациям и ротациям вместе с моделью.

void QGLWidget::resizeEvent ( QResizeEvent * event )   [virtual protected]

Указатель на событие находтся в event параметре. Вызывает виртуальную функцию resizeGL().

Переопределить QWidget.

void QGLWidget::resizeGL ( int width, int height )   [virtual protected]

Виртуальная функция, вызываемая когда виджету требуется изменить размер. Новый размер указан в width и height. Переопределяется в подклассе.

Не нуждается в вызове makeCurrent().

void QGLWidget::resizeOverlayGL ( int width, int height )   [virtual protected]

Виртуальная функция, аналог resizeGL() для операций с оверлейными контекстами.

Вызывается когда виджету требуется изменить размер. Новый размер указан в width и height. Переопределяется в подклассе.

Не нуждается в вызове makeOverlayCurrent().

void QGLWidget::setAutoBufferSwap ( bool on )   [protected]

Если on установлен в true, то автоматический свопинг GL буфера включен; иначе выключен.

Если on установлен в true и виджет использует двойную буферизацию, то с задним и передним буферами происходит автоматический свопинг после каждого вызова paintGL().

Авто-свопинг включен по умолчанию.

См. также autoBufferSwap(), doubleBuffer(), и swapBuffers().

void QGLWidget::setColormap ( const QGLColormap & cmap )

Установка палитры cmap для данного виджета. Обычно, это виджеты верхнего уровня.

См. также colormap().

void QGLWidget::setMouseTracking ( bool enable )

Если enable установлен в true, то включено отслеживание мыши; иначе отслеживание мыши выключено.

void QGLWidget::swapBuffers ()

Производит свопинг во внеэкранный буфер. Работает в случае установки в формате режима двойной буферизации.

Обычно, функция не нуждается в явном вызове, так как она вызывается автоматически после каждого обновления виджета, то есть каждый раз после вызова paintGL().

См. также doubleBuffer(), setAutoBufferSwap(), и QGLFormat::setDoubleBuffer().

void QGLWidget::updateGL ()   [virtual slot]

Обновляет виджет, вызывая функцию glDraw().

void QGLWidget::updateOverlayGL ()   [virtual slot]

Обновляет оверлеи виджета. Причиной может явиться вызов виртуальной функции paintOverlayGL().

Контекст вывода виджета становится текущим контекстом и initializeGL() будет вызвана, если до этого она еще не была вызвана.


Copyright © 2005 Trolltech Trademarks
Qt 4.1.0
Hosted by uCoz