为了账号安全,请及时绑定邮箱和手机立即绑定

QDockWidget 中小部件的错误 OpenGL 视口

QDockWidget 中小部件的错误 OpenGL 视口

斯蒂芬大帝 2023-01-04 11:23:13
我正在 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);}
查看完整描述

1 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

我忘了放一个 QOpenGLWidget::resizeEvent(event); 在调整大小事件中。完整代码在答案中。



查看完整回答
反对 回复 2023-01-04
  • 1 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号