Qtプログラミングが初めてです。私は、OpenGLモデルを表示し、それを操作するための簡単なUIコントロールを提供する簡単なアプリケーションを作成したいと考えています。Qtウィジェットを作成して親ウィジェットにするには?
これまではQGLWidgetをサブクラス化し、Qt Designerを使って簡単なフォームを作成する独自のGlWidgetを作成しました。私のメインフォームの中に、私はいくつかのUI要素と空のQWidgetを追加しました.GWWidgetに必要な領域を定義します(私はJavaのバックグラウンドから来ており、これがJavaで行われる方法です)。私はまた、私のGlWidgedのインスタンスを作成し、この空のウィジェットに追加しました。 GlWidgetは正しくレンダリングさえできます!唯一の問題は、それが郵便切手サイズであり、親ウィジェット全体を満たす方法を理解できないということです。
これを修正するにはどうすればよいですか?
MainForm.h
#ifndef _MAINFORM_H
#define _MAINFORM_H
#include "ui_MainForm.h"
#include "GlWidget.h"
class MainForm : public QMainWindow
{
Q_OBJECT
public:
MainForm();
virtual ~MainForm();
private:
Ui::MainForm widget;
GlWidget* glWidget;
};
#endif /* _MAINFORM_H */
MainForm.cpp
#include "MainForm.h"
MainForm::MainForm()
{
widget.setupUi(this);
glWidget = new GlWidget(widget.widget_gl);
}
MainForm::~MainForm()
{
}
GlWidget.h
#ifndef GLWIDGET_H
#define GLWIDGET_H
#include <qtimer.h>
#include <Qt/qgl.h>
class GlWidget : QGLWidget
{
Q_OBJECT
public:
GlWidget(QWidget* parent = 0);
protected:
virtual void initializeGL();
virtual void resizeGL(int width, int height);
virtual void paintGL();
virtual void keyPressEvent(QKeyEvent *e);
virtual void timeOut();
protected slots:
virtual void timeOutSlot();
private:
QTimer *m_timer;
};
#endif /* GLWIDGET_H */
GlWidget.cpp
#include "GlWidget.h"
#include <qapplication.h>
#include <qtimer.h>
#include <qevent.h>
GlWidget::GlWidget(QWidget* parent)
: QGLWidget(parent)
{
//setLayout();
//showMaximized();
int timerInterval = 1;
if (timerInterval == 0)
{
m_timer = 0;
} else
{
m_timer = new QTimer(this);
connect(m_timer, SIGNAL(timeout()), this, SLOT(timeOutSlot()));
m_timer->start(timerInterval);
}
}
void GlWidget::keyPressEvent(QKeyEvent *e)
{
switch (e->key())
{
case Qt::Key_Escape:
close();
}
}
void GlWidget::timeOut()
{
}
void GlWidget::timeOutSlot()
{
timeOut();
}
void GlWidget::initializeGL()
{
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}
void GlWidget::resizeGL(int width, int height)
{
height = height ? height : 1;
glViewport(0, 0, (GLint) width, (GLint) height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f, (GLfloat) width/(GLfloat) height, 0.1f, 100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void GlWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(-1.5f, 0.0f, -6.0f);
glBegin(GL_TRIANGLES);
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(-1.0f, -1.0f, 0.0f);
glVertex3f(1.0f, -1.0f, 0.0f);
glEnd();
glTranslatef(3.0f, 0.0f, 0.0f);
glBegin(GL_QUADS);
glVertex3f(-1.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glVertex3f(1.0f, -1.0f, 0.0f);
glVertex3f(-1.0f, -1.0f, 0.0f);
glEnd();
}
カスタムウィジェットをQt Designerのフォームに追加するにはどうすればよいですか?私が言う限りでは、ボタンやテキストフィールドのような標準のQtウィジェットを追加することしかできません – kitfox