2016-02-02 1 views
3

Я хотел выполнить какое-либо действие, когда диалог открывается, когда он открывается или когда он максимизируется из минимального состояния или перемещается из экрана.Есть ли у каждого виджета QT сигнал «показать»?

Есть ли у QT такой сигнал? Я также не знаю, где найти, имеет ли QT список определенных сигналов.

+0

Я не думаю, что это так, но вы можете переопределить QWidget :: showEvent (QShowEvent *), чтобы излучать свой собственный сигнал. –

ответ

3

Имеет ли каждый виджет QT сигнал «показать»?

Если посмотреть на исходный код Qt, то вы найдете QWidget :: шоу будет слот:

public Q_SLOTS: 
    // Widget management functions 

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

Щель в основном для нас, программистов, чтобы сделать нас способными соединиться с сигналами для конкретные цели, такие как нажатие кнопки, которую мы создали, делают что-то определенному виджету. Что касается Windows или Mac OS, у нас есть приложение, обслуживающее все события, поступающие из системы через цикл событий. И QWidget реагирует на все «сигналы» в виде системных событий и да, может, выполнить show() или showMaximized() или showMinimized слотов.

Но я предполагаю, что вы хотите перегружать

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

как:

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 
    } 
} 

Для распознавания случаев, когда система работает виджет, мы можем использовать QEvent::spontaneous().

Пожалуйста, обратитесь, чтобы показать и скрыть DOC событие страницы: http://doc.qt.io/qt-5/qshowevent-members.html http://doc.qt.io/qt-5/qhideevent.html

+0

Кажется, что мне нужно делать. Я новичок в QT. Означает ли это, что нам нужно переопределить метод show? Он определяется в общедоступных Q_SLOTS. Это виртуально? –

+1

Вы только перегружаете обработчик событий и делаете все, что хотите. – AlexanderVX

+0

Я обнаружил, что showEvent вызывается, когда виджет отображается в первый раз или максимизирован; но isMaximized() по какой-то причине не возвращает true. showEvent не вызывается при минимизации, я думаю, что я могу использовать hideEvent в этом случае. –

Смежные вопросы