SBGWindow signals



  • Hi all,

    In my element I am creating SBGWindow from QWidgets and I would like to catch their closing signal. Does any one of you know how to do it ?

    I already tried to connect to the QWidget closing signal:

    SAMSONWindow = SAMSON::addWidget(windowsVector[imageNumber], "RDKit SmilesConverter", SBGWindow::Lockable);
    QObject::connect(SAMSONWindow, SIGNAL(close()), this, SLOT(saveImage()));
    

    But it didn't work because SBGWindow doesn't have close() signal. I think it will be very useful to add it.

    Thanks for your help !
    Yassine



  • If windowsVector[imageNumber] derives from SBGWindowWidget, you have two possibilities:

    The first one is to override the SBGWindowWidget::hideEvent(QHideEvent* event) function:

    void MyWidget::hideEvent(SBGWindowWidget::hideEvent(QHideEvent* event)) {
    
        // do something
    
        // call the hideEvent function of the parent class
    
        SBGWindowWidget::hideEvent(QHideEvent* event)
    
    }
    

    The second one is to connect to the shown() signal of the SBGWindowWidget class (hence your derived class):

    QObject::connect(windowsVector[imageNumber], SIGNAL(shown(bool)), this, SLOT(saveImage(bool)));
    

    When the window is closed, shown(false) is emitted.



  • Thank you Stephane, it works but with the second possibility that you mentioned, shown(false) is also emitted when lock button is pressed. First option is better in that sense.



  • True. For some reason, locking needs the window to be hidden and shown again, so the signal is emitted.



  • By the way, isn't hideEvent() called when the window is locked as well, for the same reason?



  • Actually yes, I didn't test it before but hideEvent() is also called when the window is locked for the same reason as shown signal. Hmmm I thought it was possible to filter the event event->type() == QHideEvent::Hide but it seems that locking the window and hiding it (meaning closing it) has the same event type. Is it possible to distinguish these two actions ?



  • Not at the moment, so I'm adding three signals to SBGWindow for 0.7.0:

    • closed(): emitted when the window is closed by the user
    • locked(bool): emitted when the window is locked or unlocked
    • shown(bool): emitted when the window is shown or hidden


  • Perfect. Oh and maybe a flag to set the locking status of SBGWindow when it is Lockable. Thank you St├ęphane !



  • Done ;-). setLockedFlag(bool) and getLockedFlag() inside SBGWindow.


Log in to reply
 

Looks like your connection to SAMSON Connect - Forum was lost, please wait while we try to reconnect.