Приложение Qt работает на рабочем столе, но не на ноутбуке?

#c #qt #opengl #qt-creator

#c #qt #opengl #qt-creator

Вопрос:

Я пишу приложение OpenGL с использованием Qt, и оно отлично работает на моем рабочем столе, но когда я пытаюсь запустить тот же код на своем ноутбуке, он строит, но ничего не выводит? Вот мой 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. Я проверил все настройки сборки и запуска проекта, они одинаковы на обеих машинах.
На моем рабочем столе установлен монитор 1920×1080, но мой ноутбук имеет только 1366×768, может ли это иметь какое-либо отношение к этому? Есть ли какая-то внутренняя проверка, происходящая под капотом в Qt, которая зависит от разрешения моих экранов? Это практически единственное, о чем я могу думать.

Комментарии:

1. Может быть, это что-то внутреннее в вашем GLWidget.h?

2. Ваше предположение может быть правильным, @pixelpusher. Вы можете провести простой тест, разделив передаваемые вами размеры на 2 и посмотреть, может ли новое приложение работать как на десктопе, так и на ноутбуке.

3. единственное, что есть в моем GLWidget.h, — это объявление класса. Видя, что тот же код отлично работает на моем рабочем столе, я чувствую, что это скорее проблема среды.

4. Я бы также проверил настройки DPI, если ваш размер, выраженный в пикселях, автоматически масштабируется.

5. Можете ли вы создать GLWidget любого размера на своем ноутбуке? Я думаю, что ваше расследование должно начаться здесь.

Ответ №1:

Я не хочу, чтобы пользователь мог изменять размер окна

Могу я спросить, почему? Могу ли я предположить, что вы хотите, чтобы окно было фиксированного размера, потому что вы хотите использовать OpenGL для создания изображения именно такого размера? Если это так, то я должен вам сказать, что это так не сработает. Реализации OpenGL будут отображать только то, что станет видимым на экране (тест на владение пикселями). Если части окна не видны (а в вашем случае это будет иметь место на ноутбуке), эти пиксели просто не отображаются. Считывание фреймбуфера оставит эти пиксели неопределенными.

Правильный способ решения этой проблемы — использовать либо PBuffer, либо объект Frame Buffer (FBO). FBO проще в использовании, но не так широко поддерживаются в Windows (графика Intel в Windows имеет довольно плохую поддержку FBO). FBO поддерживаются всеми реализациями Linux OpenGL (Mesa (также поддерживает Intel), ATI / AMD и NVidia). В Интернете есть множество руководств по FBO и PBuffer.