簡體   English   中英

限制QWidget的大小

[英]Limit QWidget size

假設我有一堵牆,用戶只能有N窗口。 我應該限制用戶將一個窗口設置為另一個窗口。 他可以移動並調整它們的大小,但不能重疊它們。 為了忽略無效移動,我捕獲了moveEvents ,如果moveEvents event->pos()是無效位置,則將幾何重置為event->oldPos() 那么這種方法不適用於resizeEvent
為什么我不能在調整大小時使用相同的方法?
我怎么解決這個問題?

PS設置maximumSize和minimumSize不是一個好主意,因為我的實現很費力。

當用戶調整窗口resizeresize Qt::WA_WState_ConfigPending標志設置為true並開始內部調整大小操作。 在這些操作中,您會收到resizeEvent 如果您嘗試在此處調用resizeQt只會檢查該標志是否已設置,並忽略新的調整大小,直到上一個調整完成為止,但是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM