Qt app适用于台式机,但不适用于笔记本电脑?

时间:2011-10-27 18:11:03

标签: c++ qt opengl qt-creator

我正在使用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的引擎盖下是否有某种内部检查取决于我的屏幕分辨率?这几乎是我唯一能想到的。

1 个答案:

答案 0 :(得分:1)

  

我不希望用户能够调整窗口大小

我可以问为什么?我可以假设您希望窗口是固定大小的,因为您想使用OpenGL生成这样大小的图像吗?如果是这样,那么我必须告诉你,它不会那样工作。 OpenGL实现只会呈现屏幕上可见的内容(像素所有权测试)。如果窗口的某些部分不可见(在您的情况下,笔记本电脑就是这种情况)那些像素根本就不会被渲染。读出帧缓冲区会使这些像素未定义。

解决此问题的正确方法是使用 PBuffer 帧缓冲对象(FBO)。 FBO更容易使用,但在Windows上不受广泛支持(Windows上的英特尔图形具有相当差的FBO支持)。所有Linux OpenGL实现(Mesa(也包括Intel),ATI / AMD和NVidia)都支持FBO。网络上有数字FBO和PBuffer教程。