我正在使用Qt编写一个OpenGL应用程序,它在我的桌面上构建并运行良好,但是当我尝试在我的笔记本电脑上运行完全相同的代码时,它会构建但不会输出任何内容吗?这是我的main.cpp
#include <QtGui/QApplication>
#include <QtOpenGL/QGLWidget>
#include "GLWidget.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
GLWidget window;
window.resize(1050,700);
window.setFixedSize(1050, 700);
window.show();
return app.exec();
}
我不希望用户能够调整窗口大小,因此固定大小。如果我在main的最后一行设置断点,它永远不会在我的笔记本电脑上到达它。我已经逐步完成代码并且在调用show()之后(这只是一个内联函数)调试器完成代码0.我检查了所有项目构建和运行设置,它们在两台机器上都是相同的。 我的桌面有一个1920x1080的显示器,但我的笔记本电脑只有1366x768这可能与它有什么关系吗?在Qt的引擎盖下是否有某种内部检查取决于我的屏幕分辨率?这几乎是我唯一能想到的。
答案 0 :(得分:1)
我不希望用户能够调整窗口大小
我可以问为什么?我可以假设您希望窗口是固定大小的,因为您想使用OpenGL生成这样大小的图像吗?如果是这样,那么我必须告诉你,它不会那样工作。 OpenGL实现只会呈现屏幕上可见的内容(像素所有权测试)。如果窗口的某些部分不可见(在您的情况下,笔记本电脑就是这种情况)那些像素根本就不会被渲染。读出帧缓冲区会使这些像素未定义。
解决此问题的正确方法是使用 PBuffer 或帧缓冲对象(FBO)。 FBO更容易使用,但在Windows上不受广泛支持(Windows上的英特尔图形具有相当差的FBO支持)。所有Linux OpenGL实现(Mesa(也包括Intel),ATI / AMD和NVidia)都支持FBO。网络上有数字FBO和PBuffer教程。