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. how to use MouseEvent on the icon of the QMainWindow and not an QWidget of the centralWidget
Forum Updated to NodeBB v4.3 + New Features

how to use MouseEvent on the icon of the QMainWindow and not an QWidget of the centralWidget

Scheduled Pinned Locked Moved Unsolved General and Desktop
18 Posts 4 Posters 1.8k Views 2 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.
  • D Domenico

    @Pl45m4

    it is true that the icon has a fixed size. for this I would like that when you pass the mouse over the icon then MouseEvent and I will do so that when I receive signal from mouseEvent I make the image appear on another window with a larger image ... but when I pass the mouse over it is not detected the mouse event ... is there a way to receive event signal mouse on icon?

    Pl45m4P Offline
    Pl45m4P Offline
    Pl45m4
    wrote on last edited by Pl45m4
    #6

    @Domenico said in how to use MouseEvent on the icon of the QMainWindow and not an QWidget of the centralWidget:

    is there a way to receive event signal mouse on icon

    In general this is possible but I dont know if it works with the QIcon as window icon inside the title bar (You cant access the Windows Title Bar directly)

    https://doc.qt.io/qt-5/qwidget.html#windowIcon-prop

    I dont know what happens, when you connect a signal (for testing) to your Icon and then set it as window icon...
    If this works, you can filter e.g. MouseHover-Events to check if your mouse is over your icon, but as I said above, I dont know if the icon event fires from inside the Win Title Bar.

    How your solution looks like until now? Or is it this, what you have tried already? :)


    If debugging is the process of removing software bugs, then programming must be the process of putting them in.

    ~E. W. Dijkstra

    D 1 Reply Last reply
    1
    • D Domenico

      @Pl45m4

      it is true that the icon has a fixed size. for this I would like that when you pass the mouse over the icon then MouseEvent and I will do so that when I receive signal from mouseEvent I make the image appear on another window with a larger image ... but when I pass the mouse over it is not detected the mouse event ... is there a way to receive event signal mouse on icon?

      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #7

      @Domenico Please explain what you mean with "QMainWindow icon".
      Is it some icon you place somewhere in your app? If so how do you show this icon?

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      D 1 Reply Last reply
      1
      • Pl45m4P Pl45m4

        @Domenico said in how to use MouseEvent on the icon of the QMainWindow and not an QWidget of the centralWidget:

        is there a way to receive event signal mouse on icon

        In general this is possible but I dont know if it works with the QIcon as window icon inside the title bar (You cant access the Windows Title Bar directly)

        https://doc.qt.io/qt-5/qwidget.html#windowIcon-prop

        I dont know what happens, when you connect a signal (for testing) to your Icon and then set it as window icon...
        If this works, you can filter e.g. MouseHover-Events to check if your mouse is over your icon, but as I said above, I dont know if the icon event fires from inside the Win Title Bar.

        How your solution looks like until now? Or is it this, what you have tried already? :)

        D Offline
        D Offline
        Domenico
        wrote on last edited by
        #8

        @Pl45m4 yes I have already tried and it didn't work probably I will have done something wrong in the code .. but with MouseHoverEvent I have not used it .. can you give me some examples?

        Pl45m4P 1 Reply Last reply
        0
        • jsulmJ jsulm

          @Domenico Please explain what you mean with "QMainWindow icon".
          Is it some icon you place somewhere in your app? If so how do you show this icon?

          D Offline
          D Offline
          Domenico
          wrote on last edited by
          #9

          @jsulm

          I use it with ' setWindowIcon(QIcon("path to your image")); '. Was that what you meant?

          1 Reply Last reply
          0
          • D Domenico

            @Pl45m4 yes I have already tried and it didn't work probably I will have done something wrong in the code .. but with MouseHoverEvent I have not used it .. can you give me some examples?

            Pl45m4P Offline
            Pl45m4P Offline
            Pl45m4
            wrote on last edited by Pl45m4
            #10

            @Domenico said in how to use MouseEvent on the icon of the QMainWindow and not an QWidget of the centralWidget:

            Was that what you meant?

            The "real" Window Icon in Title Bar or "an icon" somewhere in your code on your Widget...

            @Domenico said in how to use MouseEvent on the icon of the QMainWindow and not an QWidget of the centralWidget:

            yes I have already tried and it didn't work probably I will have done something wrong in the code .. but with MouseHoverEvent I have not used it

            MouseHover was just an example of MouseEvent / filter.

            If you've done it right, and you still recieve no signal from your Icon, after it was set as Window Icon, then it's not possible in Qt with Signals / Events...

            EDIT:
            Nevermind, QIcon is not a QObject / QWidget... So it cant send signals at all... QPixmap / QImage can, but

            setWindowIcon();
            

            requires a QIcon.


            If debugging is the process of removing software bugs, then programming must be the process of putting them in.

            ~E. W. Dijkstra

            1 Reply Last reply
            0
            • D Offline
              D Offline
              Domenico
              wrote on last edited by
              #11

              the icon I meant is as you see the image below:

              0_1561726141549_Immagine.png

              Pl45m4P 1 Reply Last reply
              0
              • D Domenico

                the icon I meant is as you see the image below:

                0_1561726141549_Immagine.png

                Pl45m4P Offline
                Pl45m4P Offline
                Pl45m4
                wrote on last edited by Pl45m4
                #12

                @Domenico

                Check out this:
                https://forum.qt.io/topic/45489/solved-add-custom-actions-for-menu-shown-upon-clicking-the-title-bar-icon

                There is a menu that opens with a click on the TitleBar Icon. You can handle that, by using QWidget::nativeEvent. In your case, you dont even need to add some stuff to this menu, you only want the click to place your slot / function there to execute your Widget / Window, that shows your enlarged Icon / Image.

                Quite complicated for such little effect :) Why it has to be a click on the Icon? You can show a bigger version of your app icon in something like an AboutDialog.

                Edit: Only works on Windows OS. MacOS has its own nativeEvent-Messages (you have to alter the code for this) and on Linux AFAIK you cant access the TitleBars at all, cause they run in a separate program.


                If debugging is the process of removing software bugs, then programming must be the process of putting them in.

                ~E. W. Dijkstra

                D 1 Reply Last reply
                3
                • Pl45m4P Pl45m4

                  @Domenico

                  Check out this:
                  https://forum.qt.io/topic/45489/solved-add-custom-actions-for-menu-shown-upon-clicking-the-title-bar-icon

                  There is a menu that opens with a click on the TitleBar Icon. You can handle that, by using QWidget::nativeEvent. In your case, you dont even need to add some stuff to this menu, you only want the click to place your slot / function there to execute your Widget / Window, that shows your enlarged Icon / Image.

                  Quite complicated for such little effect :) Why it has to be a click on the Icon? You can show a bigger version of your app icon in something like an AboutDialog.

                  Edit: Only works on Windows OS. MacOS has its own nativeEvent-Messages (you have to alter the code for this) and on Linux AFAIK you cant access the TitleBars at all, cause they run in a separate program.

                  D Offline
                  D Offline
                  Domenico
                  wrote on last edited by
                  #13

                  @Pl45m4
                  I tried to follow as from your advice. apparently it doesn't work in any way

                  Pl45m4P 1 Reply Last reply
                  0
                  • D Domenico

                    @Pl45m4
                    I tried to follow as from your advice. apparently it doesn't work in any way

                    Pl45m4P Offline
                    Pl45m4P Offline
                    Pl45m4
                    wrote on last edited by
                    #14

                    @Domenico

                    What exactly did not work?


                    If debugging is the process of removing software bugs, then programming must be the process of putting them in.

                    ~E. W. Dijkstra

                    D 1 Reply Last reply
                    0
                    • Pl45m4P Pl45m4

                      @Domenico

                      What exactly did not work?

                      D Offline
                      D Offline
                      Domenico
                      wrote on last edited by
                      #15

                      @Pl45m4
                      with the two functions customContextMenuRequested and QWidget :: nativeEvent in no way takes the signals / slots

                      Pl45m4P 1 Reply Last reply
                      0
                      • D Domenico

                        @Pl45m4
                        with the two functions customContextMenuRequested and QWidget :: nativeEvent in no way takes the signals / slots

                        Pl45m4P Offline
                        Pl45m4P Offline
                        Pl45m4
                        wrote on last edited by Pl45m4
                        #16

                        @Domenico

                        Because you did the part, that didnt worked for him either.

                        Haven't tested it myself yet, but I think it should work.
                        You need some additional includes to access HWND.

                        https://lists.qt-project.org/pipermail/interest/2013-June/007650.html

                        https://stackoverflow.com/questions/14048565/get-hwnd-on-windows-with-qt5-from-wid


                        If debugging is the process of removing software bugs, then programming must be the process of putting them in.

                        ~E. W. Dijkstra

                        D 1 Reply Last reply
                        0
                        • Pl45m4P Pl45m4

                          @Domenico

                          Because you did the part, that didnt worked for him either.

                          Haven't tested it myself yet, but I think it should work.
                          You need some additional includes to access HWND.

                          https://lists.qt-project.org/pipermail/interest/2013-June/007650.html

                          https://stackoverflow.com/questions/14048565/get-hwnd-on-windows-with-qt5-from-wid

                          D Offline
                          D Offline
                          Domenico
                          wrote on last edited by Domenico
                          #17

                          @Pl45m4

                          worked using these codes as recommended by you with the method QMainWindow::nativeEvent:

                          HMENU sysMenu = ::GetSystemMenu((HWND) winId(),FALSE);
                          if (sysMenu != NULL)
                          {
                              ::InsertMenuA(sysMenu,0,MF_STRING, IDM_VIEWIMAGEICONBOX, "View image icon");
                          

                          //so that this action is inserted before the action close in the sequence of actions in //the system menu
                          }

                          bool MainWindow::nativeEvent(const QByteArray &eventType, void *message, long *result)
                          {
                          MSG *msg = static_cast<MSG *>(message);

                          if (msg->message == WM_SYSCOMMAND)
                          {
                              if ((msg->wParam & 0xfff0) == IDM_VIEWIMAGEICONBOX)
                              {
                                  // Show the view image icon dialog
                                  showImageIcon();
                          
                                  return true;
                               }
                          }
                          
                          return false;
                          

                          }

                          thank you very much!!

                          Pl45m4P 1 Reply Last reply
                          1
                          • D Domenico

                            @Pl45m4

                            worked using these codes as recommended by you with the method QMainWindow::nativeEvent:

                            HMENU sysMenu = ::GetSystemMenu((HWND) winId(),FALSE);
                            if (sysMenu != NULL)
                            {
                                ::InsertMenuA(sysMenu,0,MF_STRING, IDM_VIEWIMAGEICONBOX, "View image icon");
                            

                            //so that this action is inserted before the action close in the sequence of actions in //the system menu
                            }

                            bool MainWindow::nativeEvent(const QByteArray &eventType, void *message, long *result)
                            {
                            MSG *msg = static_cast<MSG *>(message);

                            if (msg->message == WM_SYSCOMMAND)
                            {
                                if ((msg->wParam & 0xfff0) == IDM_VIEWIMAGEICONBOX)
                                {
                                    // Show the view image icon dialog
                                    showImageIcon();
                            
                                    return true;
                                 }
                            }
                            
                            return false;
                            

                            }

                            thank you very much!!

                            Pl45m4P Offline
                            Pl45m4P Offline
                            Pl45m4
                            wrote on last edited by
                            #18

                            @Domenico

                            The additional option inside the action menu was just from the old forums posting. I think you can do it without the menu too (only with click).
                            If you are happy with the result, it's fine :)


                            If debugging is the process of removing software bugs, then programming must be the process of putting them in.

                            ~E. W. Dijkstra

                            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