Home · All Classes · Main Classes · Grouped Classes · Modules · Functions |
Класс 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 окнах также могут использоваться оверлеи.
Конструктор OpenGL виджета с указателем на родительский parent виджет.
Используется формат "по умолчанию". При создании виджета возвратится ошибка, если в системе нет поддержки OpenGL.
Родитель класса parent и переменная флагов, f, аргументы конструктора QWidget.
Если параметр shareWidget имеет тип QGLWidget, то этот виджет будет разделять дисплейные списки OpenGL с shareWidget. Если этот виджет и shareWidget различных форматов, списки могут быть не разделены. Но вы можете проверить успешность подключения разделяемых дисплейных списков вызовом isSharing().
Инициализация OpenGL режима прорисовки, и др. установки должны быть переопределены в initializeGL() функции, не рекомендуется делать установки в конструкторе QGLWidget вашего класса.
См. также QGLFormat::defaultFormat().
Конструктор OpenGL виджета с указателем на родительский parent виджет.
Переменная context указатель на QGLContext контекст для вышего OpenGL виджета. Вы можете указать собственный (пользовательский) QGLContext класс.
При создании виджета возвратится ошибка, если в системе нет поддержки OpenGL.
Родитель класса parent и переменная флагов, f, аргументы конструктора QWidget.
Если параметр shareWidget имеет тип QGLWidget, то этот виджет будет разделять дисплейные списки OpenGL с shareWidget. Если этот виджет и shareWidget различных форматов, списки могут быть не разделены. Но вы можете проверить успешность подключения разделяемых дисплейных списков вызовом isSharing().
Инициализация OpenGL режима прорисовки, и др. установки должны быть переопределены в initializeGL() функции, не рекомендуется делать установки в конструкторе QGLWidget вашего класса.
См. также QGLFormat::defaultFormat() и isValid().
Конструктор OpenGL виджета с указателем на родительский parent виджет.
Аргумент formatопределяет желаемые опции контекста вывода. Если система OpenGL/Window не может удовлетворить все запрашиваемым в format опциям, то используются наиболее близкие к ним. После создания в переменной format() возвращаются установленный формат контекста.
При создании виджета возвратится ошибка, если в системе нет поддержки OpenGL.
Родитель класса parent и переменная флагов, f, аргументы конструктора QWidget.
Если параметр shareWidget имеет тип QGLWidget, то этот виджет будет разделять дисплейные списки OpenGL с shareWidget. Если этот виджет и shareWidget различных форматов, списки могут быть не разделены. Но вы можете проверить успешность подключения разделяемых дисплейных списков вызовом isSharing().
Инициализация OpenGL режима прорисовки, и др. установки должны быть переопределены в initializeGL() функции, не рекомендуется делать установки в конструкторе QGLWidget вашего класса.
См. также QGLFormat::defaultFormat() и isValid().
Деструкторы виджета.
Возвращает true если виджет автоматически производит свопинг GL буфера; иначе возвращает false.
См. также setAutoBufferSwap().
Вызывается QGLContext:::bindTexture(image, target, format) для текущего контекста.
См. также deleteTexture().
Эта перегруженная функция введена для удобства. Используется наравне с вышеприведенной функцией.
Вызывается QGLContext:::bindTexture(pixmap, target, format) для текущего контекста.
См. также deleteTexture().
Эта перегруженная функция введена для удобства. Используется наравне с вышеприведенной функцией.
Вызывается QGLContext::bindTexture(fileName) для текущего контекста.
См. также deleteTexture().
Возвращает палитру для данного виджета.
Обычно это виджеты верхнего уровня, которые могут использовать различные палитры. Для потомков, функция возвратит палитру виджета верхнего уровня данного потомка.
Если палитра для виждета не установлена,QColormap то функция ничего не возвращает.
См. также setColormap().
Вощает контекст данного виджета.
Возможны ситуации, когда контекст неверен (см. isValid()), например, система не поддерживает атрибуты формата, что сообщается при сождании контекста.
Переводит изобажениеimg в unnamed-формат необходимый для OpenGL фунуций таких как glTexImage2D(). Возвращаетe изображение не испоьзуемое какQImage, но QImage::width(), QImage::height() и QImage::bits() могут применяться для работы с OpenGL.
Вызыватеся QGLContext::deleteTexture(id) для текущего контекста.
См. также bindTexture().
Делает GL контекст текущеим. Обычно вам нет необходимости вызываит эту функцию; QGLContext вызывает при неоходимости. Однако, это может понадобиться в многопотоковых средах.
Возвращает true, если вывод производится с использованием двойной буферизации; иначе возвращается false.
См. также QGLFormat::doubleBuffer().
Возвращает индекс первого дисплейного списка, сгенерированного для шрифтаr fnt. listBase задает базовое значение для дисплейных списков шрифтов. Значение по умолчанию 2000.
Возвращает формат контекста вывода GL.
См. также setFormat().
Производит вывод виртуальной функции paintGL().
Контекст вывода виджета становится текущим и initializeGL() будет вызвана в том случае, если до этого еще не была вызвана.
Иниуиализация OpenGL контекста для данного выдижета. Вызывается виртуальная функция initializeGL().
Возвращает изображение, снятое с переднего буфера. Если withAlpha true, то alpha канал включен.
В звисимости от вашего аппаратного обеспечения, вы можете выбрать цветовой буфер для снятия изображения с помощью glReadBuffer(), эту функцию надо вызвать заранее.
Эта виртуальная функция вызывается до первого вызова paintGL() или resizeGL(), и вызывется всякий раз, когда у виджета меняется контекст вывода QGLContext. Переопределяется в подклассе.
Она должна устанавливать флаги OpenGL контекста вывода, определять дисплейные списки, и т.д.
There is no need to call makeCurrent() because this has already been done when this function is called.
Виртуальная функция, аналог initializeGL() для операций с оверлейными контекстами. Вызывается initializeOverlayGL() один раз, перед первым вызывом paintOverlayGL() или resizeOverlayGL(). Переопределяется в подклассе.
Она должна устанавливать флаги OpenGL контекста вывода, определять дисплейные списки, и т.д. для оверлейного контекста.
Не нуждается в вызове makeOverlayCurrent().
Возвращает true, если контекст GL виджета используется наравне с другими контекстами данного виджета, иначе возвращает false. GL ситема может возвратить ошибку, если, например, два подключаемых контекста QGLWidgets имеют различные форматы.
См. также format().
Возвращает true, если у виджета верный контекст вывода; иначе возвращает false. Функция возвращает false, когда например, формат виджета неверен, что может произойти при отсутствии в системе поддержки OpenGL.
Делает этот виджет текущим для OpenGL операций, то есть контекст вывода виджета становится текущим OpenGL контекстом вывода.
Делает оверлейный контекст данного виджета текущим. Используется, если вам необходимо подавать OpenGL команды в оверлейный контекст не из функций initializeOverlayGL(), resizeOverlayGL(), и paintOverlayGL().
Ничего не изменяет, если виджет не оверлейный.
См. также makeCurrent().
Возвращает оверлейный контекст данного виджета, или 0 если виджет не имеет оверлеев.
См. также context().
Указатель на событие находтся в event параметре. Причиной может явиться вызов виртуальной функции paintGL().
Контекст вывода виджета становится текущим контекстом и initializeGL() будет вызвана, если до этого она еще не была вызвана.
Переопределите QWidget.
Эта виртуальная функция вызывается, когда виджет нуждается в перерисовке. Переопределяется в подклассе.
Не нужно вызывать функцию makeCurrent(), потому что она вызывается автоматически.
Виртуальная функция, аналог paintGL() для операций с оверлейными контекстами. Функция paintOverlayGL() будет вызвана, когда виджету необходима перерисовка. Переопределяется в подклассе.
Не нужно вызывать функцию makeOverlayCurrent(), потому что она вызывается автоматически.
Устанавливает цвет заполнения в режиме OpenGL. Вызывается glClearColor (в RGBA режиме) или glClearIndex (в режиме цветовых индексов) с аргументом цвета c. Применяется для текущего контекста GL.
См. также qglColor(), QGLContext::currentContext(), и QColor.
Устанавливает цвет рисования в режиме OpenGL. Вызывается glColor4 (в RGBA режиме) или glIndex (в режиме цветовых индексов) с аргументом цвета c. Применяется для текущего контекста GL.
См. также qglClearColor(), QGLContext::currentContext(), и QColor.
Выводит текущую сцену на изображение и возвращает его.
Вы можете использовать в обоих режимах: видимом и невидимом QGLWidgets.
Данная функция создает изображене и временный QGLContext для вывода. Также вызываются initializeGL(), resizeGL(), и paintGL() для контекста. И в конце предыдущий контекст вывода восстанавливается.
Размер изображения w пикселей ширины и h пикселей высоты, если один из этих параметров не установлен, то используется размер виджета.
Есди useContext установлен в true, то функция пытается использовать существующий контекст вывода для создания изображения. По умолчанию параметр равен false. Вы можете использовать значение true, если осознаете сопряженный c этим риск.
Оверлеи не могут быть выведены в изображение.
Если контекст вывода GL и изобрадения имеют различную глубину, то результат может явиться для вас сюриризом.
Замечание: создание дисплейных спсков, модификация проекции ит.д. должны быть осуществлены внутри initializeGL(). Если этого не сделать, то полученный контекст QGLContext будет не иницализоанным должным образом, и в результате изображение модет быть незаконченным/поврежденным.
Вывод строки 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. Списки уничтожаются вместе с виджетом.
Эта перегруженная функция введена для удобства. Используется наравне с вышеприведенной функцией.
x, y и z определяют координаты в сцене или объекте, в соответствии с текущими проекцией и модельными матрицами. Можно использовать для сопровождения модели текстовой меткой, которая будет подвержена трансформациям и ротациям вместе с моделью.
Указатель на событие находтся в event параметре. Вызывает виртуальную функцию resizeGL().
Переопределить QWidget.
Виртуальная функция, вызываемая когда виджету требуется изменить размер. Новый размер указан в width и height. Переопределяется в подклассе.
Не нуждается в вызове makeCurrent().
Виртуальная функция, аналог resizeGL() для операций с оверлейными контекстами.
Вызывается когда виджету требуется изменить размер. Новый размер указан в width и height. Переопределяется в подклассе.
Не нуждается в вызове makeOverlayCurrent().
Если on установлен в true, то автоматический свопинг GL буфера включен; иначе выключен.
Если on установлен в true и виджет использует двойную буферизацию, то с задним и передним буферами происходит автоматический свопинг после каждого вызова paintGL().
Авто-свопинг включен по умолчанию.
См. также autoBufferSwap(), doubleBuffer(), и swapBuffers().
Установка палитры cmap для данного виджета. Обычно, это виджеты верхнего уровня.
См. также colormap().
Если enable установлен в true, то включено отслеживание мыши; иначе отслеживание мыши выключено.
Производит свопинг во внеэкранный буфер. Работает в случае установки в формате режима двойной буферизации.
Обычно, функция не нуждается в явном вызове, так как она вызывается автоматически после каждого обновления виджета, то есть каждый раз после вызова paintGL().
См. также doubleBuffer(), setAutoBufferSwap(), и QGLFormat::setDoubleBuffer().
Обновляет виджет, вызывая функцию glDraw().
Обновляет оверлеи виджета. Причиной может явиться вызов виртуальной функции paintOverlayGL().
Контекст вывода виджета становится текущим контекстом и initializeGL() будет вызвана, если до этого она еще не была вызвана.
Copyright © 2005 Trolltech | Trademarks | Qt 4.1.0 |