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. QMdiSubWindow geometry and size save and restore

QMdiSubWindow geometry and size save and restore

Scheduled Pinned Locked Moved Solved General and Desktop
qmdiareaqmdisubwindow
13 Posts 2 Posters 1.4k Views
  • 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.
  • mrjjM mrjj

    Hi
    What about an event filter?

    https://stackoverflow.com/questions/8818297/qt-how-to-know-when-a-qmdisubwindow-is-closed

    not that subclassing QMdiSubWindow is a bad idea and im sure you can use it
    with minimal casting to use with the std. QMdiArea

    artwawA Offline
    artwawA Offline
    artwaw
    wrote on last edited by
    #3

    @mrjj Thank you for clarifying. Will test both. I never used event filters before, seems like a learning opportunity.

    mrjjM 1 Reply Last reply
    1
    • artwawA artwaw

      @mrjj Thank you for clarifying. Will test both. I never used event filters before, seems like a learning opportunity.

      mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on last edited by mrjj
      #4

      @artwaw
      well event filters are handy for catching events from outside in cases where subclassing might be a bit invasive to existing code or subclassing would be a bit massive if many types of widgets are involved.

      That said, one has to take care not to eat events by accident.

      https://doc.qt.io/qt-5/eventsandfilters.html

      artwawA 1 Reply Last reply
      1
      • mrjjM mrjj

        @artwaw
        well event filters are handy for catching events from outside in cases where subclassing might be a bit invasive to existing code or subclassing would be a bit massive if many types of widgets are involved.

        That said, one has to take care not to eat events by accident.

        https://doc.qt.io/qt-5/eventsandfilters.html

        artwawA Offline
        artwawA Offline
        artwaw
        wrote on last edited by
        #5

        @mrjj Event filter works nicely when mdi sub window is closed and restored but there is one edge case:
        when closing application with sub window open it is not called at all. Any hint you can offer how to get past that?

        mrjjM 1 Reply Last reply
        0
        • artwawA artwaw

          @mrjj Event filter works nicely when mdi sub window is closed and restored but there is one edge case:
          when closing application with sub window open it is not called at all. Any hint you can offer how to get past that?

          mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on last edited by
          #6

          @artwaw
          Hi
          Well i guess any open windows are just deleted, not closed as such, when whole app exits.

          One way could be to override closeEvent for the mainwindow and
          loop over the windows (ui->mdiArea->subWindowList ) , calling close() on each
          to have the event code handle it like they were manually closed.

          artwawA 2 Replies Last reply
          1
          • mrjjM mrjj

            @artwaw
            Hi
            Well i guess any open windows are just deleted, not closed as such, when whole app exits.

            One way could be to override closeEvent for the mainwindow and
            loop over the windows (ui->mdiArea->subWindowList ) , calling close() on each
            to have the event code handle it like they were manually closed.

            artwawA Offline
            artwawA Offline
            artwaw
            wrote on last edited by
            #7

            @mrjj Yes. Why didn't I thought of that? Thank you, you're a star!

            1 Reply Last reply
            1
            • mrjjM mrjj

              @artwaw
              Hi
              Well i guess any open windows are just deleted, not closed as such, when whole app exits.

              One way could be to override closeEvent for the mainwindow and
              loop over the windows (ui->mdiArea->subWindowList ) , calling close() on each
              to have the event code handle it like they were manually closed.

              artwawA Offline
              artwawA Offline
              artwaw
              wrote on last edited by
              #8

              @mrjj but calling close() on each of opened sub windows doesn't call the eventFilter on any of them.

              mrjjM 1 Reply Last reply
              1
              • artwawA artwaw

                @mrjj but calling close() on each of opened sub windows doesn't call the eventFilter on any of them.

                mrjjM Offline
                mrjjM Offline
                mrjj
                Lifetime Qt Champion
                wrote on last edited by
                #9

                @artwaw
                Hi
                Ah yes. my bad. sorry. the close() function is a direct method.
                So move the inner saving code to a function that takes a QMdiSubWindow *
                and call that from closeEvent pr Window.

                You could also use
                QCoreApplication::postEvent
                to send a close to them.

                artwawA 1 Reply Last reply
                0
                • mrjjM mrjj

                  @artwaw
                  Hi
                  Ah yes. my bad. sorry. the close() function is a direct method.
                  So move the inner saving code to a function that takes a QMdiSubWindow *
                  and call that from closeEvent pr Window.

                  You could also use
                  QCoreApplication::postEvent
                  to send a close to them.

                  artwawA Offline
                  artwawA Offline
                  artwaw
                  wrote on last edited by
                  #10

                  @mrjj it's interesting how it doesn't work.
                  I tried both postEvent and sendEvent, the former with normal and high priority - to no avail.

                  What's even more interesting for me here is that when mdi sub window is getting closed independently the internal widget's closeEvent() is being processed. When I just close the application with sub windows opened their closeEvent()s are not called at all - so implementing custom class based on QMdiSubWindow and overriding its closeEvent() makes no sense too.

                  I am truly puzzled now.

                  artwawA 2 Replies Last reply
                  0
                  • artwawA artwaw

                    @mrjj it's interesting how it doesn't work.
                    I tried both postEvent and sendEvent, the former with normal and high priority - to no avail.

                    What's even more interesting for me here is that when mdi sub window is getting closed independently the internal widget's closeEvent() is being processed. When I just close the application with sub windows opened their closeEvent()s are not called at all - so implementing custom class based on QMdiSubWindow and overriding its closeEvent() makes no sense too.

                    I am truly puzzled now.

                    artwawA Offline
                    artwawA Offline
                    artwaw
                    wrote on last edited by
                    #11
                    This post is deleted!
                    1 Reply Last reply
                    0
                    • artwawA artwaw

                      @mrjj it's interesting how it doesn't work.
                      I tried both postEvent and sendEvent, the former with normal and high priority - to no avail.

                      What's even more interesting for me here is that when mdi sub window is getting closed independently the internal widget's closeEvent() is being processed. When I just close the application with sub windows opened their closeEvent()s are not called at all - so implementing custom class based on QMdiSubWindow and overriding its closeEvent() makes no sense too.

                      I am truly puzzled now.

                      artwawA Offline
                      artwawA Offline
                      artwaw
                      wrote on last edited by
                      #12

                      All sorted. I made mistakes somewhere else and as a result closeEvent() of QMainWindow has not been called - once I fixed that everything works as per proposed solution with QCoreApplication::postEvent()

                      mrjjM 1 Reply Last reply
                      1
                      • artwawA artwaw

                        All sorted. I made mistakes somewhere else and as a result closeEvent() of QMainWindow has not been called - once I fixed that everything works as per proposed solution with QCoreApplication::postEvent()

                        mrjjM Offline
                        mrjjM Offline
                        mrjj
                        Lifetime Qt Champion
                        wrote on last edited by
                        #13

                        @artwaw
                        Hi
                        excellent :)

                        Just as a note. If you get very into Docks then please notice
                        https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System

                        as It can dock to central/center, a feature which often is much loved when you want such setup.

                        1 Reply Last reply
                        1

                        • Login

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