Qt-app werkt op desktop, maar niet op laptop?

Ik ben een OpenGL-app aan het schrijven met Qt, en het bouwt en draait prima op mijn bureaublad, maar wanneer ik probeer exact dezelfde code op mijn laptop te gebruiken, bouwt het maar produceert het niets? Hier is mijn main.cpp

#include 
#include 
#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();
}

Ik wil niet dat de gebruiker het formaat van het venster kan wijzigen, vandaar de vaste grootte. Als ik een onderbrekingspunt op de laatste hoofdregel instel, komt deze nooit op mijn laptop. Ik ben door de code gestapt en direct nadat show() is aangeroepen (wat gewoon een inline-functie is) eindigt de debugger met code 0. Ik heb alle project-build- en uitvoeringsinstellingen gecontroleerd, deze zijn op beide machines hetzelfde. Mijn desktop heeft een 1920x1080 monitor, maar mijn laptop is slechts 1366x768 kan dit er iets mee te maken hebben? Is er een soort van interne controle gaande onder de motorkap in Qt die afhangt van mijn schermresolutie? Dat is vrijwel het enige dat ik kan bedenken.

1
het enige in mijn GLWidget.h is de klasseverklaring. Aangezien mijn code goed werkt op mijn bureaublad, heb ik het gevoel dat het meer om een ​​omgeving gaat.
toegevoegd de auteur mikestaub, de bron
@KeithThompson gebruikt win7 op beide comps
toegevoegd de auteur mikestaub, de bron
@karlphillip Ik probeerde te delen door 2, dezelfde resultaten. werkt op een desktop, niet op een laptop
toegevoegd de auteur mikestaub, de bron
@BenVoigt de DPI is op beide machines ingesteld op 100%
toegevoegd de auteur mikestaub, de bron
@karlphillip wanneer ik debug op mijn laptop, de GLWidget-constructor wordt aangeroepen, de resize-oproep slaagt en de debugger wordt afgesloten na de show() -aanroep. Dit gebeurt voor elke grootte van GLWidget.
toegevoegd de auteur mikestaub, de bron
Welk besturingssysteem gebruikt u?
toegevoegd de auteur Keith Thompson, de bron
Je schatting is misschien correct, @pixelpusher. U kunt een eenvoudige test uitvoeren, de door u gepasseerde formaten verdelen en zien of de nieuwe toepassing zowel op het bureaublad als op de laptop kan worden uitgevoerd.
toegevoegd de auteur karlphillip, de bron
Kun je een GLWidget van elke grootte op je laptop maken? Ik denk dat je onderzoek hier moet beginnen.
toegevoegd de auteur karlphillip, de bron
Heb je alle QT-bibliotheken op de laptop geïnstalleerd? Er ontbreekt mogelijk een afhankelijkheidsprobleem of er wordt geprobeerd een andere versie van een bibliotheek te gebruiken. Zorg ervoor dat uw PATH-omgevingsvariabele naar de juiste bibliotheken wijst.
toegevoegd de auteur karlphillip, de bron
Ik zou ook de DPI-instellingen controleren, voor het geval dat uw in pixels weergegeven grootte autoscaled wordt.
toegevoegd de auteur Ben Voigt, de bron
Misschien is het iets intern in je GLWidget.h?
toegevoegd de auteur Morten Kristensen, de bron
Om een ​​heel voor de hand liggende vraag te stellen: Heb je Qt gecompileerd met OpenGL-ondersteuning?
toegevoegd de auteur Robin, de bron
Controleer of u de nieuwste beeldschermstuurprogramma's hebt.
toegevoegd de auteur user362638, de bron
Terug in de tijd dat ik een schijnbaar vergelijkbaar probleem had met een Windows XP-machine in een ziekenhuis met strenge toegangsbeperkingen. OpenGL Qt-app zou niet worden uitgevoerd - crash bij opstarten. Uiteindelijk heb ik het beperkt tot de OS OpenGL-dll's. App mocht OpenGL-bibliotheken op OS-niveau niet gebruiken OF OpenGL ontbrak in het besturingssysteem. Gebruik depends op QtOpenGl4.dll op uw laptop om te controleren of alle dll's toegankelijk zijn. Hercompileer je jouw app ook op een laptop of kopieer je gewoon het binaire bestand van de desktop?
toegevoegd de auteur ak., de bron

1 antwoord

Ik wil niet dat de gebruiker het formaat van het venster kan wijzigen

Mag ik vragen waarom? Mag ik aannemen dat u wilt dat het venster een vaste grootte heeft, omdat u OpenGL wilt gebruiken om een ​​afbeelding precies van deze grootte te genereren? Als dat zo is, dan moet ik je zeggen dat het niet zo zal werken. OpenGL-implementaties geven alleen weer wat op het scherm zichtbaar wordt (pixeleigendomstest). Als delen van het venster niet zichtbaar zijn (en in uw geval is dit het geval op de laptop), worden die pixels gewoon niet weergegeven. Het uitlezen van de framebuffer zal deze pixels ongedefinieerd achterlaten.

De juiste manier om dit probleem aan te pakken, is het gebruik van een PBuffer of een Frame Buffer Object (FBO) . FBO's zijn gemakkelijker te gebruiken, maar niet zo breed ondersteund op Windows (Intel-afbeeldingen op Windows hebben nogal slechte FBO-ondersteuning). FBO's worden ondersteund door alle Linux OpenGL-implementaties (Mesa (ook Intel), ATI/AMD en NVidia). Er zijn cijfers over FBO en PBuffer zelfstudies in het web.

1
toegevoegd