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
Forum Updated to NodeBB v4.3 + New Features

QMdiSubWindow geometry and size save and restore

Scheduled Pinned Locked Moved Solved General and Desktop
qmdiareaqmdisubwindow
13 Posts 2 Posters 2.2k 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.
  • mrjjM Offline
    mrjjM Offline
    mrjj
    Lifetime Qt Champion
    wrote on last edited by
    #2

    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 1 Reply Last reply
    2
    • 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