如何将 QMainWindow 调整大小事件传递给 QMainWindow 中包含的 QGLWidget?
Posted
技术标签:
【中文标题】如何将 QMainWindow 调整大小事件传递给 QMainWindow 中包含的 QGLWidget?【英文标题】:How do I pass QMainWindow resize events down to a QGLWidget contained in the QMainWindow? 【发布时间】:2012-06-26 00:04:00 【问题描述】:最初,我遵循http://qt-project.org/wiki/How_to_use_OpenGL_Core_Profile_with_Qt的结构。我创建了一个 vanilla Visual Studio 2010 Qt 应用程序项目,单击 .ui 文件启动 Qt Designer,插入一个 QWidget 并将其提升为 myglwidget。然后我创建了 QGLWidget 的 myglwidget 子类。
效果很好,我得到了我的红色三角形。
问题是当主窗口调整大小时,myglwidget 没有收到任何调整大小事件,即使我将小部件大小属性设置为“扩展”。
当我重构我的应用构造函数以调用 setCentralWidget(&myglwidget_) 代码编译并运行但没有出现 OpenGL 窗口。
我没有看到如何调整小部件的大小以匹配主窗口大小。我也不明白为什么 setCentralWidget 方法不起作用。
我相信我知道如何通过编写显式 Qt 代码来解决问题,但这违背了我尝试使用 Qt Designer 在 Qt 中构建 OpenGL 应用程序的目的。
【问题讨论】:
【参考方案1】:应用程序“baz6”的以下代码解决了该问题。我在向导生成的代码中插入的代码标记为//***
baz6.h:
#ifndef BAZ6_H
#define BAZ6_H
#include <QtGui/QMainWindow>
#include "ui_baz6.h"
#include "myglwidget.h" //***
#include <QResizeEvent>
class baz6 : public QMainWindow
Q_OBJECT
public:
baz6(QWidget *parent = 0, Qt::WFlags flags = 0);
~baz6();
private:
Ui::baz6Class ui;
myGLWidget *myglwidget_; //***
;
#endif // BAZ6_H
baz6.c:
#include "baz6.h"
#include "myglwidget.h"
baz6::baz6(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
ui.setupUi(this);
myglwidget_ = new myGLWidget(); //***
setCentralWidget(myglwidget_); //***
baz6::~baz6()
以前,我没有显式构造 myGLWidget。
【讨论】:
以上是关于如何将 QMainWindow 调整大小事件传递给 QMainWindow 中包含的 QGLWidget?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 QMainWindow 鼠标点击位置传递给 QGraphicsView
如何调整 QMainWindow 的大小以适合具有 setVerticalHeaderLabels 的 QTableWidget