Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Vladimir от Октябрь 11, 2011, 14:25



Название: QMainWindow + OpenGL
Отправлено: Vladimir от Октябрь 11, 2011, 14:25
Доброго дня) Нужно отобразить графику OpenGL в главном окне Qt:
Класс главного окна:

Код:
class ClientGL : public QMainWindow, public Ui::ClientGLClass 
{
Q_OBJECT

public:
ClientGL(QWidget *parent = 0, Qt::WFlags flags = 0);
~ClientGL();
};

я так понимаю надо создать еще один класс:

Код:
class DrawOpenGL : public QGLWidget
{
Q_OBJECT

public:
DrawOpenGL();

protected:
    virtual void initializeGL();
    virtual void resizeGL(int nWidth, int nHeight);
    virtual void paintGL();

};

И этот класс каким-то образом увязать с главным окном.. вопрос КАК???!!!
Допустим разместить через Qt Desiner, например, объект QWidget и в него выводить.. можно?? Тогда каким образом, подскажите пожалуйста?! =)




Название: Re: QMainWindow + OpenGL
Отправлено: alexman от Октябрь 11, 2011, 15:50
void QMainWindow::setCentralWidget ( QWidget * widget )
А в дизайнере через "Promote to".


Название: Re: QMainWindow + OpenGL
Отправлено: Vladimir от Октябрь 11, 2011, 16:54
void QMainWindow::setCentralWidget ( QWidget * widget )
А в дизайнере через "Promote to".

Если я правильно понял в конструкторе главного окна (QMainWindow) добавляем:

setCentralWidget(widgetGL); // где widgetGL objectName виджета

в дизайнере: правой кнопкой по Главному окну -> Promote to, где выбираем
"Base class name:" - QWidget
"Promoted class name:" - DrawOpenGL
"Header file:" - тот хедер, где описан DrawOpenGL

тем самым мы свяжем главное окно с виджетом? И функции
    virtual void initializeGL();
    virtual void resizeGL(int nWidth, int nHeight);
    virtual void paintGL();
должны вызываться автоматически при создании главного окна??? Или как оно должно работать?!
 


Название: Re: QMainWindow + OpenGL
Отправлено: alexman от Октябрь 12, 2011, 07:51
Про ООП почитал бы для начала.


Название: Re: QMainWindow + OpenGL
Отправлено: Vladimir от Октябрь 12, 2011, 09:33
Про ООП почитал бы для начала.

И, что конкретно мне о нем (ООП) почитать, что решит мой вопрос?


Название: Re: QMainWindow + OpenGL
Отправлено: Vladimir от Октябрь 12, 2011, 12:15
Что за форум, сам вопрос задаешь и сам же на него отвечаешь ((
Может кому пригодится, работает так:
Код:
class DrawOpenGL;
class ClientGL : public QMainWindow, public Ui::ClientGLClass
{
Q_OBJECT

public:
ClientGL(QWidget *parent = 0, Qt::WFlags flags = 0);
~ClientGL();

        DrawOpenGL *glWidget;
};

В конструкторе класса  ClientGL:
Код:
glWidget = new DrawOpenGL(widgetGL); // где widgetGL objectName виджета
widgetGL->setLayout(new QHBoxLayout);
widgetGL->layout()->addWidget(glWidget);

в методах initializeGL(); resizeGL(int nWidth, int nHeight); paintGL(); задаешь нужные параметры отрисовки OpenGL

Вот и все)