2015-09-25 4 views
2

Je veux développer une application dans Qt pour iOS qui contient une carte. Pendant l'utilisation, le verrouillage de l'écran du téléphone doit être désactivé. Mais je ne trouve aucune solution pour empêcher le verrouillage de l'écran dans iOS en utilisant Qt.Comment empêcher l'ios de verrouillage d'écran avec Qt

Comment cela peut-il être fait?

Répondre

4

Vous devez utiliser l'API iOS native. Vous pouvez compiler le code ObjC++ directement avec le compilateur clang de votre application Qt.

Ainsi, vous pouvez mélanger .cpp et .mm (ObjC++) fichiers. QtCreator et qmake supportent ceci via le mot-clé OBJECTIVE_SOURCES.

Dans une mise en œuvre yourclass.mm:

#import <Foundation/Foundation.h> 
    #import <UIKit/UIKit.h> 

    void YourClass::setTimerDisabled() { 
     [[UIApplication sharedApplication] setIdleTimerDisabled: YES] 
    } 

yourclass.h:

class YourClass 
{ 
public: 
    void setTimerDisabled() 
} 

Maintenant, vous pouvez appeler à partir de n'importe où dans votre app Qt:

YourClass yc; 
yc.setTimerDisbabled(); 

Dans votre fichier de projet (.pro), si vous voulez seulement ce fichier sur iOS:

ios { 
OBJECTIVE_SOURCES += \ 
    yourclass.mm \ 
} 

Et si vous ne voulez code indiqué sur une plate-forme unique, les commandes de préprocesseur utilisation dans vos fichiers source et en-tête comme ceci:

#if defined(Q_OS_IOS) 
    // iOs stuff 
#elsif defined(Q_OS_ANDROID) 
    //Android stuff ... 
#else 
    //Other stuff ... 
#endif 
+0

merci Hubi! Mais maintenant j'ai le problème que qt ne peut pas trouver Foundation si je le compile pour Android. Mon application devrait fonctionner sur les deux systèmes d'exploitation. Pouvez-vous me donner un indice supplémentaire? –

+1

J'ai mis à jour ma réponse. – Hubi

+0

Maintenant, je peux tout compiler et l'App fonctionne sur l'IOS, mais malheureusement, l'affichage ne reste pas éveillé. Et dans Qt Creator, la ligne [[UIApplication ...] est affichée comme inconnue. Pouvez-vous m'aider une fois de plus? :) –