Qt 父窗口移动事件,会传递到子窗口吗
时间: 2023-08-05 20:05:53 浏览: 295
Qt的父窗口移动事件会传递到其子窗口上,但需要注意以下两点:
1. 只有当子窗口在父窗口中的位置是相对的(即相对父窗口的坐标没有变化),才会收到父窗口移动事件。
2. 如果你重写了子窗口的moveEvent()函数,那么子窗口将不再收到父窗口移动事件。因此,在重写moveEvent()函数时,你需要确保在子类中调用父类的moveEvent()函数。
下面是一个简单的例子,演示了父窗口移动事件如何传递到子窗口:
```cpp
#include <QApplication>
#include <QWidget>
#include <QLabel>
class MyWidget : public QWidget
{
public:
MyWidget(QWidget *parent = nullptr)
: QWidget(parent)
{
QLabel *label = new QLabel("Hello, World!", this);
label->move(50, 50);
}
protected:
void moveEvent(QMoveEvent *event) override
{
qDebug() << "Parent moved to" << event->pos();
QWidget::moveEvent(event);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyWidget widget;
widget.show();
return a.exec();
}
```
在这个例子中,我们创建了一个MyWidget类,它继承自QWidget。在MyWidget的构造函数中,我们创建了一个子窗口QLabel,并将其移动到(50, 50)的位置。在MyWidget中重写了moveEvent()函数,并在该函数中打印出父窗口的新位置。当我们移动MyWidget时,我们可以看到控制台输出了父窗口的新位置。这表明父窗口移动事件被正确地传递到了子窗口QLabel上。
阅读全文