2011-09-29 29 views
1

我在窗口上調用了show(),並且它有幾個控件並顯示了所有控件。qt隱藏showEvent上的控件()

其中一個控件是繼承自QFrame的自定義控件。

如果設置了特定的標誌,我想隱藏這個控件。所以,我有

void MyCustomControl::showEvent (QShowEvent * /* evt */) 
{ 
    if (!m_visibleAllowed) 
     hide(); 
} 

雖然這隱藏控制,它使控制愚蠢;它看起來凍結了。當窗口調整大小時,應該控制的區域不會刷新。搜索論壇,我得到的想法是隱藏控制不應該在showEvent()上完成是真的嗎?如果是這樣,那麼我應該怎樣/在哪裏嘗試隱藏控制。如果隱藏控制showEvent()是可能的,我怎樣才能防止控制被凍結。

感謝您的時間。

回答

5

如果問題出在您的show事件期間調用hide()(我無法確認它是明確禁止的,但它聽起來不像一個好主意一般)並且調用隱藏您的show事件是你真的需要有這樣的代碼,那麼你可以使用一個單杆定時器:

QTimer::singleShot(0, this, SLOT(hide())); 

這隻會推遲hide()功能的執行,直到下一輪事件循環。

+0

謝謝..做到了。 –

1

也許你可以使用QStackedLayoutQStackedWidget,它有兩個部件:你的控件和一個「空白」QWidget。如果你這樣做,而不是在你的控件上使用show()和hide(),你可以切換堆棧頂部的內容。

這種方式你永遠不會嘗試渲染一個隱藏的小部件 - 如果你的控件不可見,你渲染空白的QWidget,而我懷疑這將解決你的圖形故障。

希望這會有所幫助!