Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does each QT widget have a 'show' signal?

Tags:

c++

qt

I wanted to do some action when a dialog shows when it opens or when it maximizes from a minimal status or it moves from out of a screen.

Does QT have such a signal? I am also not sure where to find if QT has a list of signals defined.

like image 509
Joe C Avatar asked Feb 02 '16 23:02

Joe C


1 Answers

Does each QT widget have a 'show' signal?

If you look at Qt source code then you will find QWidget::show to be a slot:

public Q_SLOTS:
    // Widget management functions

    virtual void setVisible(bool visible);
    void setHidden(bool hidden);
    void show();

The slot is mainly for us, programmers to make us able to connect with signals for specific purposes like clicking the button we created does something to certain widget. As for Windows or Mac OS, we have the app serving all the events coming from the system via event loop. And QWidget reacts on all the 'signals' in the form of system events coming and yes, may, execute show() or showMaximized() or showMinimized slots then.

But I can assume you want to overload

virtual void showEvent(QShowEvent *);
virtual void hideEvent(QHideEvent *);

Like:

void MyWidget::showEvent(QShowEvent *e)
{
    if (isMaximized())
    {
         if (e->spontaneous())
         {
             // the author would like to know
             // if the event is issued by the system
         }
         ; // the action for maximized
    }
    else
    {
         ; // the action for normal show
    }
}

void MyWidget::hideEvent(QHideEvent *)
{
    if (isMinimized())
    {
         ; // the action for minimized
    }
    else
    {
         ; // the action for hide
    }
}

For recognizing cases when the system operates the widget we can use QEvent::spontaneous().

Please also refer to show and hide event doc pages: http://doc.qt.io/qt-5/qshowevent-members.html http://doc.qt.io/qt-5/qhideevent.html

like image 168
Alexander V Avatar answered Sep 23 '22 18:09

Alexander V