使用qgraphicssscene和qopenglwidget使用qgraphicsview自动调整大小

时间:2015-12-09 13:46:43

标签: qt opengl qgraphicsview

我正在尝试在MainWindow中使用QGraphicsView和QOpenGLWidget: 究竟: 我的QMainWindow包含一些布局和小部件。还有一个QGraphicsView(类GraphicsView继承自QGraphicsView)。

在“第二”步骤中,我创建一个QGraphicsScene并添加一个openglwidget(类OpenGLControl继承自QOpenGLWidget)。在OpenGLControl中,我只设置了背景来测试我的应用程序(glClearColor ...)。

现在我的请求,当我改变mainWindow的大小时,我也想改变QGraphicsView,QGraphicsScene和QOpenGLWidget的大小。我在graphicsView中尝试了一个resizeEvent,但它没有用。

主窗口(.cpp)的实现:

#include "mainwindow.h"
#include "openglcontrol.h"
#include "graphicsview.h"

MainWindow::MainWindow(QWidget *parent)
                 : QMainWindow(parent)
{
createLayout();
createScene();

}

void MainWindow::createLayout()
{
view = new graphicsView;
kosGrid = new QGridLayout;
xKoord = new QLineEdit;
yKoord = new QLineEdit;
zKoord = new QLineEdit;
drawButton = new QPushButton("Draw Point");
clearButton = new QPushButton("Clear");
KoordLabel = new QLabel("Koordinaten");
xLabel = new QLabel("X:");
yLabel = new QLabel("Y: ");
zLabel = new QLabel("Z: ");
controlBox = new QVBoxLayout;

controlBox->addStretch(1);
controlBox->addWidget(KoordLabel);
xhBox = new QHBoxLayout;
xhBox->addWidget(xLabel);
xhBox->addWidget(xKoord);
controlBox->addLayout(xhBox);

yhBox = new QHBoxLayout;
yhBox->addWidget(yLabel);
yhBox->addWidget(yKoord);
controlBox->addLayout(yhBox);

zhBox = new QHBoxLayout;
zhBox->addWidget(zLabel);
zhBox->addWidget(zKoord);
controlBox->addLayout(zhBox);

controlBox->addWidget(drawButton);
controlBox->addWidget(clearButton);
xKoord->setFixedWidth(50);
yKoord->setFixedWidth(50);
zKoord->setFixedWidth(50);
drawButton->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);

xKoord->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
yKoord->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
zKoord->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);

hBox = new QHBoxLayout;
hBox->addLayout(controlBox);
hBox->addWidget(view);

mainLayout = new QWidget;
mainLayout->setLayout(hBox);

setCentralWidget(mainLayout);
}

void MainWindow::createScene()
{
scene = new QGraphicsScene(this);

qsurface = new QSurfaceFormat;
qsurface->setRenderableType(QSurfaceFormat::OpenGL);
qsurface->setProfile(QSurfaceFormat::CoreProfile);
qsurface->setVersion(3,3);

oglwidget = new OpenGLControl;
oglwidget->setFormat(*qsurface);
oglwidget->
//oglwidget->resize(10,10);

scene->addWidget(oglwidget);

view->setScene(scene);
}

和我对resizeEvent的尝试:

void graphicsView::resizeEvent(QResizeEvent *event)
{
if(scene())
    scene()->setSceneRect(QRect(QPoint(0,0), event->size()));
QGraphicsView::resizeEvent(event);
}

最后一个(调整大小的)mainWindow的截图(QOpenGLWidget(蓝色背景)小于QGraphicsView) mainWindow with QOpenGLWidget

我可以使用SIGNAL吗?或者有人可以用另一种方式帮助我吗? 谢谢

0 个答案:

没有答案