Qt 父窗口A移动,A中有QTabWidget对象 B ,B中有 一个QLabel C,窗口D 无父窗口且只在C中有指针窗口D的指针,不可以在窗口A,窗口B中操作C和D,移动A时,如何使得窗口D一直在窗口C上方? 此问题中如果仅重写resizeEvent事件,当A移动时,D并不会跟着移动。有什么方式能解决
时间: 2023-07-19 14:03:45 浏览: 85
【Qt】Qt窗口几何布局.rar
可以通过重写A的moveEvent事件来实现让窗口D一直在窗口C上方。
在A的moveEvent事件中,获取C在A中的位置和大小,然后计算出D应该在C的上方的位置,并将D移动到该位置。具体实现代码如下:
```cpp
void A::moveEvent(QMoveEvent *event)
{
QWidget::moveEvent(event);
// 获取C在A中的位置和大小
QRect cRect = B->mapTo(this, C->geometry()).adjusted(0, 0, 0, -B->tabBar()->height());
// 计算D应该在C的上方的位置
QPoint dPos = cRect.topLeft() + QPoint((cRect.width() - D->width()) / 2, -D->height());
// 将D移动到该位置
D->move(dPos);
}
```
这样,当A移动时,窗口D会一直跟着移动并保持在窗口C的上方。注意,需要在A的构造函数中将D设置为无父窗口,以避免在A和B中操作D。
阅读全文