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. Qt examples and the usage of pointers

Qt examples and the usage of pointers

Scheduled Pinned Locked Moved Solved General and Desktop
17 Posts 3 Posters 4.6k Views 3 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.
  • p3c0P Offline
    p3c0P Offline
    p3c0
    Moderators
    wrote on last edited by p3c0
    #2

    @Defohin
    Actually it is documented here.
    Quoting a statement from it:

    Once loaded, plugins remain in memory until all instances of QPluginLoader has been unloaded, or until the application terminates. You can attempt to unload a plugin using unload()...

    And then what unload says:

    This happens automatically on application termination, so you shouldn't normally need to call this function.
    Don't try to delete the root component. Instead rely on that unload() will automatically delete it when needed.

    So in the end all the instances will be deleted on program termination.

    157

    1 Reply Last reply
    1
    • D Offline
      D Offline
      Defohin
      wrote on last edited by
      #3

      What about the other things such as new QLineEdit is it going to be deleted automatically also? How do I know when a pointer is going to leak or not in Qt?

      p3c0P 1 Reply Last reply
      0
      • D Defohin

        What about the other things such as new QLineEdit is it going to be deleted automatically also? How do I know when a pointer is going to leak or not in Qt?

        p3c0P Offline
        p3c0P Offline
        p3c0
        Moderators
        wrote on last edited by p3c0
        #4

        @Defohin AFAIK they are reparented. You see these widgets are added into the gridlayout and is then set as the main layout for EchoWindow. So when EchoWindow is deleted it deletes the layout which eventually deletes these widgets.

        157

        D 1 Reply Last reply
        1
        • p3c0P p3c0

          @Defohin AFAIK they are reparented. You see these widgets are added into the gridlayout and is then set as the main layout for EchoWindow. So when EchoWindow is deleted it deletes the layout which eventually deletes these widgets.

          D Offline
          D Offline
          Defohin
          wrote on last edited by
          #5

          @p3c0 How do I know when a pointer is going to leak or not in Qt?

          mrjjM 1 Reply Last reply
          0
          • D Defohin

            @p3c0 How do I know when a pointer is going to leak or not in Qt?

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

            @Defohin said in Qt examples and the usage of pointers:

            @p3c0 How do I know when a pointer is going to leak or not in Qt?

            You cannot. Just like any other pointer.
            But you can Design your app so all Widgets
            have a Parent and all parents are owned by
            Main Window.
            So just normal care is needed.

            D 1 Reply Last reply
            0
            • mrjjM mrjj

              @Defohin said in Qt examples and the usage of pointers:

              @p3c0 How do I know when a pointer is going to leak or not in Qt?

              You cannot. Just like any other pointer.
              But you can Design your app so all Widgets
              have a Parent and all parents are owned by
              Main Window.
              So just normal care is needed.

              D Offline
              D Offline
              Defohin
              wrote on last edited by
              #7

              @mrjj That is kinda tricky, I tried to use a few softwares to detect leaking but they say that even if my pointer has a parent like new SomeClass(this) it's "leaking", it's probably false positive, but they say it's a leak, so I have no idea when it's an actual leak or not.

              1 Reply Last reply
              0
              • mrjjM Offline
                mrjjM Offline
                mrjj
                Lifetime Qt Champion
                wrote on last edited by mrjj
                #8

                Yes its tricky.
                Tools like valgrind needs tweaking to reduce the noise.
                If the tool is too simple , it dont understand the delete by parent and
                when it see no delete for it, flag as leak.

                On the bright side, its not that easy to make a leak as not assigning a parent will make it a
                window and embedding a widget into something will (almost) surely own it. ( like layouts)

                D 1 Reply Last reply
                0
                • mrjjM mrjj

                  Yes its tricky.
                  Tools like valgrind needs tweaking to reduce the noise.
                  If the tool is too simple , it dont understand the delete by parent and
                  when it see no delete for it, flag as leak.

                  On the bright side, its not that easy to make a leak as not assigning a parent will make it a
                  window and embedding a widget into something will (almost) surely own it. ( like layouts)

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

                  @mrjj said in Qt examples and the usage of pointers:

                  On the bright side, its not that easy to make a leak as not assigning a parent will make it a
                  window and embedding a widget into something will (almost) surely own it. ( like layouts)

                  What you mean with that? Sorry for my ignorance.

                  mrjjM 1 Reply Last reply
                  0
                  • D Defohin

                    @mrjj said in Qt examples and the usage of pointers:

                    On the bright side, its not that easy to make a leak as not assigning a parent will make it a
                    window and embedding a widget into something will (almost) surely own it. ( like layouts)

                    What you mean with that? Sorry for my ignorance.

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

                    @Defohin
                    Hi
                    Well when I first started Qt I was also a bit sceptical about never
                    calling delete on my widgets. ( as in pure c++ its a leak)

                    However, if you try to design an application and forget to assign parent, you will find it as it becomes a window.

                    QLabel *mine= new QLabel();
                    mine->show()

                    Will popup as a window and its very clear something its up.

                    Also then you want to place it into some other widget, you
                    use layouts.
                    and as soon as you go
                    somewidget->layout()->addWidget(mine)
                    its owned by the layout.

                    So its actually a bit hard to create a widget you dont want as window and create leak
                    without assigning a parent as it will clearly show :)

                    That leaves mostly QDialogs and windows to leak but there you have
                    diag->setAttribute(Qt::WA_DeleteOnClose);
                    So if closed, they clean up.

                    D 1 Reply Last reply
                    0
                    • mrjjM mrjj

                      @Defohin
                      Hi
                      Well when I first started Qt I was also a bit sceptical about never
                      calling delete on my widgets. ( as in pure c++ its a leak)

                      However, if you try to design an application and forget to assign parent, you will find it as it becomes a window.

                      QLabel *mine= new QLabel();
                      mine->show()

                      Will popup as a window and its very clear something its up.

                      Also then you want to place it into some other widget, you
                      use layouts.
                      and as soon as you go
                      somewidget->layout()->addWidget(mine)
                      its owned by the layout.

                      So its actually a bit hard to create a widget you dont want as window and create leak
                      without assigning a parent as it will clearly show :)

                      That leaves mostly QDialogs and windows to leak but there you have
                      diag->setAttribute(Qt::WA_DeleteOnClose);
                      So if closed, they clean up.

                      D Offline
                      D Offline
                      Defohin
                      wrote on last edited by
                      #11

                      @mrjj The same happens with QObject? If I don't assign a parent to it?

                      mrjjM 1 Reply Last reply
                      0
                      • D Defohin

                        @mrjj The same happens with QObject? If I don't assign a parent to it?

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

                        Yes, its actually QObject that does this Parent->Child deleting and not Qwidgets :)

                        But QObject dont become window. Its a QWidgets thing.

                        Just so we are clear. All QWidgets are QObject :)

                        D 1 Reply Last reply
                        0
                        • mrjjM mrjj

                          Yes, its actually QObject that does this Parent->Child deleting and not Qwidgets :)

                          But QObject dont become window. Its a QWidgets thing.

                          Just so we are clear. All QWidgets are QObject :)

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

                          @mrjj Meaning that if I don't delete QObject or assign a parent to it, it's going to leak, correct?

                          mrjjM 1 Reply Last reply
                          0
                          • D Defohin

                            @mrjj Meaning that if I don't delete QObject or assign a parent to it, it's going to leak, correct?

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

                            @Defohin
                            Yes that could happen.
                            http://doc.qt.io/qt-5/objecttrees.html

                            D 1 Reply Last reply
                            1
                            • mrjjM mrjj

                              @Defohin
                              Yes that could happen.
                              http://doc.qt.io/qt-5/objecttrees.html

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

                              @mrjj Thank you, it's really tricky, but I'll try to be careful with that.

                              mrjjM 1 Reply Last reply
                              0
                              • D Defohin

                                @mrjj Thank you, it's really tricky, but I'll try to be careful with that.

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

                                @Defohin
                                well, you should also look into using smart pointers.
                                Thats how its managed in plain c++.
                                http://stackoverflow.com/questions/31750689/how-to-use-smart-pointer-for-auto-clean-up
                                https://en.wikipedia.org/wiki/Smart_pointer

                                Small note. Do not put smart pointers on Widgets with parents as it get ugly :)

                                Also Qt comes with Qt versions of those.

                                D 1 Reply Last reply
                                2
                                • mrjjM mrjj

                                  @Defohin
                                  well, you should also look into using smart pointers.
                                  Thats how its managed in plain c++.
                                  http://stackoverflow.com/questions/31750689/how-to-use-smart-pointer-for-auto-clean-up
                                  https://en.wikipedia.org/wiki/Smart_pointer

                                  Small note. Do not put smart pointers on Widgets with parents as it get ugly :)

                                  Also Qt comes with Qt versions of those.

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

                                  @mrjj Thank you very much.

                                  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