Как передать события изменения размера QMainWindow в QGLWidget, содержащийся в QMainWindow?

Первоначально я следовал структуре http://qt-project.org/wiki/How_to_use_OpenGL_Core_Profile_with_Qt. Я создал проект приложения vanilla Visual Studio 2010 Qt, щелкнул файл .ui, чтобы запустить Qt Designer, вставил QWidget и повысил его до myglwidget. Затем я создал подкласс myglwidget для QGLWidget.

Это сработало нормально, и я получил свой красный треугольник.

Проблема в том, что myglwidget не получает никаких событий изменения размера при изменении размера главного окна, даже если я установил свойства размера виджета на «расширение».

И когда я реструктурирую конструктор приложения для вызова setCentralWidget(&myglwidget_), код компилируется и запускается, но окно OpenGL не появляется.

Я не вижу, как изменить размер виджета, чтобы он соответствовал размеру главного окна. Я также не понимаю, почему подход setCentralWidget не сработал.

Я считаю, что знаю, как решить проблему, написав явный код Qt, но это противоречит цели моей попытки создать приложение OpenGL в Qt с помощью Qt Designer.


person Walt Donovan    schedule 26.06.2012    source источник


Ответы (1)


Следующий код для приложения «baz6» устраняет проблему. Код, который я вставил в сгенерированный мастером код, помечен //***

баз6.ч:

#ifndef BAZ6_H
#define BAZ6_H

#include <QtGui/QMainWindow>
#include "ui_baz6.h"
#include "myglwidget.h"        //***

#include <QResizeEvent>

class baz6 : public QMainWindow
{
    Q_OBJECT

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

private:
    Ui::baz6Class ui;
    myGLWidget *myglwidget_;      //***
};

#endif // BAZ6_H

baz6.c:

#include "baz6.h"
#include "myglwidget.h"

baz6::baz6(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    ui.setupUi(this);

    myglwidget_ = new myGLWidget();      //***
    setCentralWidget(myglwidget_);       //***
}

baz6::~baz6()
{

}

Раньше я не создавал явно myGLWidget.

person Walt Donovan    schedule 26.06.2012