2016-02-02 27 views
3

我想在對話框顯示何時打開或何時從最小狀態最大化或從屏幕移出時進行一些操作。每個QT小部件是否都有'show'信號?

QT有這樣的信號嗎? 我也不確定在哪裏可以找到QT是否有定義的信號列表。

+0

我不這麼認爲,但你可以重新實現了QWidget :: showEvent(QShowEvent *)發出自己的信號。 –

回答

3

每個QT小部件都有'show'信號嗎?

如果你看看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()小部件識別的情況。

請同時參閱顯示和隱藏事件文檔頁面: 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在第一次顯示widget或最大化時被調用;但是由於某種原因isMaximized()不返回true。 showEvent在最小化時不會被調用,我想我可能想在案例中使用hideEvent。 –

相關問題