繁体   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