Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt for Python
  4. Using Signals in QGraphicsItem
Forum Updated to NodeBB v4.3 + New Features

Using Signals in QGraphicsItem

Scheduled Pinned Locked Moved Solved Qt for Python
25 Posts 5 Posters 2.0k 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.
  • J JonB
    25 Feb 2025, 09:50

    @adrien-lsh
    I think it is to do with the initialisation, requiring both inherited classes to be initialised. You were only doing so for the QGraphicsLineItem, not initialising the QObject. I find the following does work without crashing:

    class CroppingLine(QObject, QGraphicsLineItem):
        moved = Signal(object, QPointF)
    
        def __init__(self, x1: float, y1: float, x2: float, y2: float):
            #super(QGraphicsLineItem, self).__init__(x1, y1, x2, y2)
            QObject.__init__(self)
            QGraphicsLineItem.__init__(self, x1, y1, x2, y2)
    

    There may be other ways of doing this with super() and/or not swapping the inheritance order, I just know this works fine.

    A Offline
    A Offline
    adrien-lsh
    wrote on 25 Feb 2025, 10:03 last edited by
    #21

    @JonB
    Of course ! It never initialized the QObject so signals would never work.
    Thank you for your help !

    1 Reply Last reply
    0
    • S Offline
      S Offline
      SGaist
      Lifetime Qt Champion
      wrote on 25 Feb 2025, 10:23 last edited by SGaist
      #22

      Hi,

      It's Python3, remove the class from your super calls. This should allow Python to do proper initialisation of the chain of classes (though sometimes it might fail for complex cases).

      [Edit: we are in such a complex case]

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

      J 1 Reply Last reply 25 Feb 2025, 10:27
      0
      • S SGaist
        25 Feb 2025, 10:23

        Hi,

        It's Python3, remove the class from your super calls. This should allow Python to do proper initialisation of the chain of classes (though sometimes it might fail for complex cases).

        [Edit: we are in such a complex case]

        J Offline
        J Offline
        JonB
        wrote on 25 Feb 2025, 10:27 last edited by JonB
        #23

        @SGaist
        But the OP started with just

        super().__init__(x1, y1, x2, y2)
        

        and, for whatever reason, that segments (later, on signal emit) because the QObject part has not been initialized, apparently. That is why I tried splitting it into two separate explicit initializations, which makes it work. So what exactly are you proposing?

        S 1 Reply Last reply 25 Feb 2025, 11:18
        0
        • J JonB
          25 Feb 2025, 10:27

          @SGaist
          But the OP started with just

          super().__init__(x1, y1, x2, y2)
          

          and, for whatever reason, that segments (later, on signal emit) because the QObject part has not been initialized, apparently. That is why I tried splitting it into two separate explicit initializations, which makes it work. So what exactly are you proposing?

          S Offline
          S Offline
          SGaist
          Lifetime Qt Champion
          wrote on 25 Feb 2025, 11:18 last edited by SGaist
          #24

          @JonB I misread the code !

          We are in the territory where your solution (using __init__) is the way to go. Multiple inheritance in Python is quite tricky...

          QObject expects an optional parent parameter which is not given here but it's not expecting the parameters for the QGraphicsLineItem constructor hence the failure. You can try to use the kwargs trick however it won't work either as it's not part of any of the method signature and thus can't work either.

          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
          • N Offline
            N Offline
            Nlight
            wrote on 25 Feb 2025, 20:02 last edited by Nlight
            #25
            This post is deleted!
            1 Reply Last reply
            0

            21/25

            25 Feb 2025, 10:03

            • Login

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