2016-03-21 25 views
0

我正在Qt中使用QWindow对象。 一旦设置了无框标志,窗口就会固定到其默认位置。 有没有办法找回设置此标志时失去的可移动性。我已经尝试了几种不同的方法,但它们都需要似乎只能是QWidget的对象制作无框QWindow可移动

+0

那么使用['QWindow :: setPosition'](http://doc.qt.io/qt-5/qwindow.html#setPosition)来代替? – thuga

+0

可移动性你的意思是,当它具有'Qt :: FramelessWindowHint'时通过鼠标移动?你是否意识到它可能取决于操作系统?在Linux上,我们通过按下LAlt + LMB来实现这种可移动性。在Windows上,这将是不同的故事。或者,也许你可以捕捉一些鼠标事件并以某种方式处理它,但乍看之下,我觉得它太复杂了。 – Radek

+0

感谢thuga。我想出了如何使用setPosition和mousePress以及mouseMove事件来移动窗口,但是当我尝试使用mouseRelease时,没有发现任何事件。仍然需要尝试一些其他的事情,但再次感谢提示 – user3447816

回答

0

您可以从QWidget继承和覆盖mouseMoveEventmousePressEventmouseReleaseEvent移动()函数。跟踪鼠标按钮被按下时从头到尾(中心或其他)到光标的距离;如果移动鼠标,移动它,如果按钮仍然按下。

我会通过添加一个bool tracking成员变量和一个QPoint delta变量来跟踪移动窗口的时间和距离。

您可以使用它来添加自定义样式标题栏;从QWidget继承并添加如上所述的所有修剪,并让它移动它最远的祖先(父母或父母,只要它不为空)。