如何在 Qt 表单类中调整 OpenGL 小部件的大小

Posted

技术标签:

【中文标题】如何在 Qt 表单类中调整 OpenGL 小部件的大小【英文标题】:How to resize an OpenGL widget inside a Qt form class 【发布时间】:2013-03-21 17:30:58 【问题描述】:

我在 Qt 表单类 (MyForm) 的 QVBoxLayout (verticalLayout_2) 中有一个 OpenGL 小部件 (myWidget)。

当窗体调整大小后,我想调整 OpenGL 小部件的大小。

我应该在 changeEvent 方法中写什么,以将 QVBoxLayout 和 OpenGL 小部件调整为新大小?

MyForm::MyForm(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::MyForm)

    ui->setupUi(this);
    myWidget = new GL_Widget;
    ui->verticalLayout_2->addWidget( myWidget );
    adjustSize();


void MyForm::changeEvent(QEvent *e)

    // What should I write here?

【问题讨论】:

【参考方案1】:

您不必编写任何代码来自动调整子窗口小部件的大小。 (另外,changeEvent() 无论如何都不是用于此目的的正确事件处理程序。)

您的问题可能与您使用 Qt Designer 创建的布局有关。您可能将垂直布局从侧边栏拖到表单小部件中,这实际上并没有创建***布局。很容易犯这个错误。

相反,请执行以下操作之一在 Qt Designer 中创建***布局:

右键单击对象检查器中的***(表单)小部件,然后从“布局”菜单中选择一种布局。

选择您的***小部件并单击工具栏中的布局图标之一:

如果您正确设置了布局,则无需添加任何代码。如果您在 Qt Designer 中预览表单,您的布局将自动更新。

【讨论】:

谢谢@jmk,我通过在Qt Designer中右键单击表单后选择“布局->在网格中布局”解决了这个问题。现在表单会自动调整大小而不使用 changeEvent 方法。

以上是关于如何在 Qt 表单类中调整 OpenGL 小部件的大小的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Horde3d 和 OpenGL 绘制 Qt 小部件?

如何允许浮动 Qt5 停靠小部件的交互式调整大小

如何在Qt Creator中使两个小部件相互连接并相互调整大小[重复]

如何关闭在提升的小部件中单击的按钮上的 qt 小部件 ui?

Qt/OpenGL 小部件中的显示损坏

我拖放一个表视图小部件 (Qt)。填充元素后如何调整大小?