我正在 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 QSizefrom PyQt5.QtWidgets import QOpenGLWidgetclass 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);}
添加回答
举报
0/150
提交
取消
