Qt 事件父窗口A移动,A中有QTabWidget对象 B ,B中有 一个QLabel C,窗口D 无父窗口且只在C中有指针窗口D的指针,不可以在A,B中有D的指针,移动A,如何使得窗口D一直在窗口C上方?在这种情况下,C是QWidget和C为QLabel 处理有什么不同呢
时间: 2023-10-01 13:05:34 浏览: 28
对于在QWidget中的QLabel C,可以通过重载其resizeEvent函数,在其中重新定位窗口D的位置,使其一直在C的上方。具体步骤如下:
1. 在QLabel C的构造函数中,创建窗口D,并设置其初始位置。
2. 在QLabel C中重载resizeEvent函数,重新计算窗口D的位置,并移动窗口D。
```cpp
void QLabel::resizeEvent(QResizeEvent *event)
{
// 重新计算窗口D的位置
int x = this->x() + (this->width() - dWidget->width()) / 2;
int y = this->y() - dWidget->height();
// 移动窗口D
dWidget->move(x, y);
}
```
注意,由于窗口D没有父窗口,所以需要使用move函数来移动窗口的位置。
对于在QTabWidget中的QLabel C,其处理方式与QWidget中的QLabel基本相同。唯一的区别是,需要在QTabWidget的currentChanged信号中重新计算窗口D的位置。
```cpp
connect(tabWidget, &QTabWidget::currentChanged, [=](int index) {
if (index == tabIndex) {
// 计算窗口D的位置
int x = cLabel->x() + (cLabel->width() - dWidget->width()) / 2;
int y = cLabel->y() - dWidget->height();
// 移动窗口D
dWidget->move(x, y);
}
});
```
这样,无论是在QWidget还是在QTabWidget中,窗口D都能够跟随C移动,并保持在其上方。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)