[英]Limit QWidget size
假設我有一堵牆,用戶只能有N
窗口。 我應該限制用戶將一個窗口設置為另一個窗口。 他可以移動並調整它們的大小,但不能重疊它們。 為了忽略無效移動,我捕獲了moveEvents
,如果moveEvents
event->pos()
是無效位置,則將幾何重置為event->oldPos()
。 那么這種方法不適用於resizeEvent
。
為什么我不能在調整大小時使用相同的方法?
我怎么解決這個問題?
PS設置maximumSize和minimumSize不是一個好主意,因為我的實現很費力。
當用戶調整窗口resize
或resize
Qt::WA_WState_ConfigPending
標志設置為true
並開始內部調整大小操作。 在這些操作中,您會收到resizeEvent
。 如果您嘗試在此處調用resize
, Qt
只會檢查該標志是否已設置,並忽略新的調整大小,直到上一個調整完成為止,但是resizeEvent
再次使用相同的數據發送resizeEvent
,您將陷入無限循環。
您可以使用此技巧來克服檢查:
void widget::resizeEvent(QResizeEvent* e)
{
if (e->size().width() > 800)
{
setAttribute(Qt::WA_WState_ConfigPending, false);
resize(e->oldSize());
}
}
但是,仍然會閃爍窗口,因為在獲取resizeEvent
時已經調整了窗口的大小。 實際上,操作系統會調整窗口大小,然后將WM_SIZE
消息發送到窗口以處理更改,這就是為什么您必須處理調整大小結果的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.