我正在 QDockWidget 内的一个小部件上绘制东西,并且具有 1:1 的平方纵横比。但是,未正确调整绘图表面的大小。
它应该如何工作:
https://i.stack.imgur.com/UvK25.gif
怎么运行的:
https://i.stack.imgur.com/XQeXv.gif
该代码仅在角(坐标)处绘制 4 个点,在中间绘制另一个点
const float vertices[] = {
0.0f, 0.0f, 0.0f,
-1.0f, 1.0f, 0.0f,
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
1.0f, 1.0f, 0.0f,
};
resizeEvent(保持 1:1 的纵横比):
void Renderer::resizeEvent(QResizeEvent *event){
if (this->width() > this->height()){
this->resize(this->height(), this->height());
} else {
this->resize(this->width(), this->width());
}
}
我制作了一个运行良好的 python MRE:
from OpenGL.GL import (glClear, GL_COLOR_BUFFER_BIT, glEnable, glClearColor, GL_DEPTH_BUFFER_BIT, glBegin, glColor, glVertex, glEnd,
glPointSize, GL_POINT_SMOOTH, GL_POINTS)
from PyQt5.QtCore import QSize
from PyQt5.QtWidgets import QOpenGLWidget
class Renderer(QOpenGLWidget):
def __init__(self):
QOpenGLWidget.__init__(self)
def sizeHint(self):
return QSize(700, 700)
def resizeEvent(self, event):
# Keeps 1:1 aspect ratio
if self.width() > self.height():
self.resize(self.height(), self.height())
elif self.height() > self.width():
self.resize(self.width(), self.width())
QOpenGLWidget.resizeEvent(self, event)
def paintGL(self):
glClearColor(1, 1, 1, 0)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glPointSize(100)
glColor(1.0, 0.5, 0.2, 1.0)
glEnable(GL_POINT_SMOOTH)
glBegin(GL_POINTS)
points = [[0, 0, 0],
[-1, 1, 0],
[-1, -1, 0],
[1, -1, 0],
[1, 1, 0]]
for point in points:
glVertex(point[0], point[1], point[2])
glEnd()
self.update()
但是,C++ 版本不是这样工作的。C++版本的MRE:
#include "headers/renderer.h"
#include <QMainWindow>
#include <iostream>
Renderer::Renderer(MainWindow *parent)
{
this->parent = parent;
}
QSize Renderer::sizeHint() const {
return QSize(700, 700);
}
斯蒂芬大帝
波斯汪
随时随地看视频慕课网APP
相关分类