Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. [SOLVED] QDialog in fullscreen - disable OS screensaver?
Forum Updated to NodeBB v4.3 + New Features

[SOLVED] QDialog in fullscreen - disable OS screensaver?

Scheduled Pinned Locked Moved General and Desktop
29 Posts 5 Posters 15.3k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    maximus
    wrote on last edited by
    #4

    I found this :
    http://developer.nokia.com/community/wiki/Inhibiting_the_device_screen_saver_using_Qt

    But I can't include "QSystemScreenSaver", maybe it's no longer part of Qt? Using 5.2.1


    Free Indoor Cycling Software - https://maximumtrainer.com

    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #5

      Hi,

      It was part of QtMobility and AFAICS, it's not been ported (yet ?) to Qt 5

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      0
      • M Offline
        M Offline
        MarianMMX
        wrote on last edited by
        #6

        On Windows:
        "SetThreadExecutionState":http://msdn.microsoft.com/en-us/library/aa373208(VS.85).aspx

        @
        #include <Windows.h>
        void DisableScreenSaver()
        {
        SetThreadExecutionState(EXECUTION_STATE.ES_DISPLAY_REQUIRED | EXECUTION_STATE.ES_CONTINUOUS);
        }
        void EnableScreenSaver()
        {
        SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS);
        }

        @

        1 Reply Last reply
        0
        • hskoglundH Offline
          hskoglundH Offline
          hskoglund
          wrote on last edited by
          #7

          Yeah I tried that but alas, if you look at "the docs":http://msdn.microsoft.com/en-us/library/aa373208.aspx, at the bottom (just before examples):
          "...
          This function does not stop the screen saver from executing. " :-(

          1 Reply Last reply
          0
          • M Offline
            M Offline
            MarianMMX
            wrote on last edited by
            #8

            Ok, tested on Windows XP:

            DisableScreenSaver.c
            @
            #include <Windows.h>
            #pragma comment(lib, "user32.lib")

            int main()
            {
            SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, FALSE , NULL, SPIF_SENDWININICHANGE);
            return 0;
            }

            @

            1 Reply Last reply
            0
            • M Offline
              M Offline
              maximus
              wrote on last edited by
              #9

              Finally trying to achieve this function after many user requested it.

              I'm thinking of a easy cross-platform way to do it (Windows and Mac OS X)

              What I'm thinking:

              • start a QTimer that fire each 1 minute
              • [Slot] emulate a key press on the keyboard or a small mouse movement (keyboard or mouse is not used in this part of the software so shouldn't matter)

              I'll see if I can achieve it (not sure how to emulate key or mouse movement in Qt) and post result!

              Thanks Qt!


              Free Indoor Cycling Software - https://maximumtrainer.com

              1 Reply Last reply
              0
              • M Offline
                M Offline
                maximus
                wrote on last edited by
                #10

                Finally trying to achieve this function after many user requested it.

                I'm thinking of a easy cross-platform way to do it (Windows and Mac OS X)

                What I'm thinking:

                • start a QTimer that fire each 1 minute
                • [Slot] emulate a key press on the keyboard or a small mouse movement (keyboard or mouse is not used in this part of the software so shouldn't matter)

                I'll see if I can achieve it (not sure how to emulate key or mouse movement in Qt) and post result!

                Thanks Qt!


                Free Indoor Cycling Software - https://maximumtrainer.com

                1 Reply Last reply
                0
                • M Offline
                  M Offline
                  maximus
                  wrote on last edited by
                  #11

                  I tried this one on my QDialog. But still not working (screensaver activates)
                  Maybe QDialog doesn't handle KeyPress event? investigating..

                  @void WorkoutDialog::desactivateScreensaver() {

                  qDebug() << "OK DESACTIVATE SCREENSAVER!";
                  
                  QKeyEvent *event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Enter, Qt::NoModifier);
                  QCoreApplication::postEvent(this, event);
                  
                  QKeyEvent *event1 = new QKeyEvent(QEvent::KeyRelease, Qt::Key_Enter, Qt::NoModifier);
                  QCoreApplication::postEvent(this, event1);
                  

                  }@


                  Free Indoor Cycling Software - https://maximumtrainer.com

                  1 Reply Last reply
                  0
                  • M Offline
                    M Offline
                    maximus
                    wrote on last edited by
                    #12

                    I tried this one on my QDialog. But still not working (screensaver activates)
                    Maybe QDialog doesn't handle KeyPress event? investigating..

                    @void WorkoutDialog::desactivateScreensaver() {

                    qDebug() << "OK DESACTIVATE SCREENSAVER!";
                    
                    QKeyEvent *event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Enter, Qt::NoModifier);
                    QCoreApplication::postEvent(this, event);
                    
                    QKeyEvent *event1 = new QKeyEvent(QEvent::KeyRelease, Qt::Key_Enter, Qt::NoModifier);
                    QCoreApplication::postEvent(this, event1);
                    

                    }@


                    Free Indoor Cycling Software - https://maximumtrainer.com

                    1 Reply Last reply
                    0
                    • M Offline
                      M Offline
                      maximus
                      wrote on last edited by
                      #13

                      Weird because I see my eventFilter being called, but the action never takes place on the UI (key pressed, mouseMove, ..)

                      @bool WorkoutDialog::eventFilter(QObject *watched, QEvent *event) {

                      Q_UNUSED(watched);
                      
                      //    qDebug() << "EventFilter " << watched << "Event:" << event;
                      
                      /// Disable enter pressed on dialog (bug cause it to minimize)
                      if(event->type() == QEvent::KeyPress) {
                          QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
                          if(keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return )
                              return true; // mark the event as handled
                      }
                      
                      
                      if(event->type() == QEvent::WindowStateChange)
                      {
                          if(windowState().testFlag(Qt::WindowMaximized) == true) {
                              qDebug() << "Going call showFullSceen here";
                              this->showFullScreenWin();
                              return true;
                          }
                      }
                      return false;
                      

                      }@


                      Free Indoor Cycling Software - https://maximumtrainer.com

                      1 Reply Last reply
                      0
                      • M Offline
                        M Offline
                        maximus
                        wrote on last edited by
                        #14

                        Weird because I see my eventFilter being called, but the action never takes place on the UI (key pressed, mouseMove, ..)

                        @bool WorkoutDialog::eventFilter(QObject *watched, QEvent *event) {

                        Q_UNUSED(watched);
                        
                        //    qDebug() << "EventFilter " << watched << "Event:" << event;
                        
                        /// Disable enter pressed on dialog (bug cause it to minimize)
                        if(event->type() == QEvent::KeyPress) {
                            QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
                            if(keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return )
                                return true; // mark the event as handled
                        }
                        
                        
                        if(event->type() == QEvent::WindowStateChange)
                        {
                            if(windowState().testFlag(Qt::WindowMaximized) == true) {
                                qDebug() << "Going call showFullSceen here";
                                this->showFullScreenWin();
                                return true;
                            }
                        }
                        return false;
                        

                        }@


                        Free Indoor Cycling Software - https://maximumtrainer.com

                        1 Reply Last reply
                        0
                        • M Offline
                          M Offline
                          maximus
                          wrote on last edited by
                          #15

                          [quote author="MarianMMX" date="1397293908"]Ok, tested on Windows XP:

                          DisableScreenSaver.c
                          @
                          #include <Windows.h>
                          #pragma comment(lib, "user32.lib")

                          int main()
                          {
                          SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, FALSE , NULL, SPIF_SENDWININICHANGE);
                          return 0;
                          }

                          @
                          [/quote]

                          Tested and works on windows 7 too. thanks
                          Update: not really what I wanted, it still disable the ScreenSaver after you leave the app.. don't want to mess with personal settings..

                          I gave up trying to emulate a key press, will use this code instead.
                          Trying to find an equivalent for Mac OS X now


                          Free Indoor Cycling Software - https://maximumtrainer.com

                          1 Reply Last reply
                          0
                          • M Offline
                            M Offline
                            maximus
                            wrote on last edited by
                            #16

                            [quote author="MarianMMX" date="1397293908"]Ok, tested on Windows XP:

                            DisableScreenSaver.c
                            @
                            #include <Windows.h>
                            #pragma comment(lib, "user32.lib")

                            int main()
                            {
                            SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, FALSE , NULL, SPIF_SENDWININICHANGE);
                            return 0;
                            }

                            @
                            [/quote]

                            Tested and works on windows 7 too. thanks
                            Update: not really what I wanted, it still disable the ScreenSaver after you leave the app.. don't want to mess with personal settings..

                            I gave up trying to emulate a key press, will use this code instead.
                            Trying to find an equivalent for Mac OS X now


                            Free Indoor Cycling Software - https://maximumtrainer.com

                            1 Reply Last reply
                            0
                            • M Offline
                              M Offline
                              maximus
                              wrote on last edited by
                              #17

                              I read you can call Objective-C from Qt

                              I want "to use this method":http://stackoverflow.com/questions/5596319/how-to-programmatically-prevent-a-mac-from-going-to-sleep/5596946#5596946

                              I made a header file named "MacUtil.h" and a "MacUtil.mm" that will call the Objective-C code. Will see if I can get it to work and post result


                              Free Indoor Cycling Software - https://maximumtrainer.com

                              1 Reply Last reply
                              0
                              • M Offline
                                M Offline
                                maximus
                                wrote on last edited by
                                #18

                                I read you can call Objective-C from Qt

                                I want "to use this method":http://stackoverflow.com/questions/5596319/how-to-programmatically-prevent-a-mac-from-going-to-sleep/5596946#5596946

                                I made a header file named "MacUtil.h" and a "MacUtil.mm" that will call the Objective-C code. Will see if I can get it to work and post result


                                Free Indoor Cycling Software - https://maximumtrainer.com

                                1 Reply Last reply
                                0
                                • M Offline
                                  M Offline
                                  maximus
                                  wrote on last edited by
                                  #19

                                  On the way, will edit this post with solution
                                  MacUtil.h

                                  @class MacUtil
                                  {

                                  public:
                                  MacUtil();
                                  ~MacUtil();

                                  void disableScreensaver();
                                  void releaseScreensaverLock();
                                  

                                  private:
                                  IOPMAssertionID assertionID;

                                  };

                                  #endif // MACUTIL_H@

                                  MacUtil.mm
                                  @//http://stackoverflow.com/questions/5596319/how-to-programmatically-prevent-a-mac-from-going-to-sleep/5596946#5596946
                                  void MacUtil::disableScreensaver() {

                                  CFStringRef* reasonForActivity= CFSTR("MaximumTrainer FullScreen Workout");
                                  IOReturn success = IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep,
                                                                      kIOPMAssertionLevelOn, reasonForActivity, &assertionID);
                                  if (success == kIOReturnSuccess)
                                  {
                                      //return sucess? todo..
                                  }
                                  

                                  }

                                  void MacUtil::releaseScreensaverLock() {

                                  IOPMAssertionRelease(assertionID);
                                  

                                  }
                                  @


                                  Free Indoor Cycling Software - https://maximumtrainer.com

                                  1 Reply Last reply
                                  0
                                  • M Offline
                                    M Offline
                                    maximus
                                    wrote on last edited by
                                    #20

                                    On the way, will edit this post with solution
                                    MacUtil.h

                                    @class MacUtil
                                    {

                                    public:
                                    MacUtil();
                                    ~MacUtil();

                                    void disableScreensaver();
                                    void releaseScreensaverLock();
                                    

                                    private:
                                    IOPMAssertionID assertionID;

                                    };

                                    #endif // MACUTIL_H@

                                    MacUtil.mm
                                    @//http://stackoverflow.com/questions/5596319/how-to-programmatically-prevent-a-mac-from-going-to-sleep/5596946#5596946
                                    void MacUtil::disableScreensaver() {

                                    CFStringRef* reasonForActivity= CFSTR("MaximumTrainer FullScreen Workout");
                                    IOReturn success = IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep,
                                                                        kIOPMAssertionLevelOn, reasonForActivity, &assertionID);
                                    if (success == kIOReturnSuccess)
                                    {
                                        //return sucess? todo..
                                    }
                                    

                                    }

                                    void MacUtil::releaseScreensaverLock() {

                                    IOPMAssertionRelease(assertionID);
                                    

                                    }
                                    @


                                    Free Indoor Cycling Software - https://maximumtrainer.com

                                    1 Reply Last reply
                                    0
                                    • M Offline
                                      M Offline
                                      maximus
                                      wrote on last edited by
                                      #21

                                      Anyone good with Objective-C?

                                      I'm getting theses error tryings to compile the new class (mm file) I just added:

                                      duplicate symbol __ZN8MacUtilsC2Ev in:
                                      MacUtils.o
                                      macutils.o
                                      duplicate symbol __ZN8MacUtilsC1Ev in:
                                      MacUtils.o
                                      macutils.o

                                      Seems like a conflict with
                                      @#import <IOKit/pwr_mgt/IOPMLib.h> in MacUtil.mm@
                                      and my .pro has already theses:
                                      @ LIBS += -framework IOKit
                                      LIBS += -framework CoreFoundation@


                                      Free Indoor Cycling Software - https://maximumtrainer.com

                                      1 Reply Last reply
                                      0
                                      • M Offline
                                        M Offline
                                        maximus
                                        wrote on last edited by
                                        #22

                                        Anyone good with Objective-C?

                                        I'm getting theses error tryings to compile the new class (mm file) I just added:

                                        duplicate symbol __ZN8MacUtilsC2Ev in:
                                        MacUtils.o
                                        macutils.o
                                        duplicate symbol __ZN8MacUtilsC1Ev in:
                                        MacUtils.o
                                        macutils.o

                                        Seems like a conflict with
                                        @#import <IOKit/pwr_mgt/IOPMLib.h> in MacUtil.mm@
                                        and my .pro has already theses:
                                        @ LIBS += -framework IOKit
                                        LIBS += -framework CoreFoundation@


                                        Free Indoor Cycling Software - https://maximumtrainer.com

                                        1 Reply Last reply
                                        0
                                        • M Offline
                                          M Offline
                                          maximus
                                          wrote on last edited by
                                          #23

                                          Solved, I had 2 times the OBJECTIVE_SOURCES directive in my pro file pointing to the same .mm file.
                                          Will have to go learn Objective-C now, sigh.. :)


                                          Free Indoor Cycling Software - https://maximumtrainer.com

                                          1 Reply Last reply
                                          0

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved