为了解释这种情况,我有一个QMainWindow,里面有很多东西。 我的目标是制作某种通知,该通知出现在此窗口的右下角。
通知小组件必须位于所有其他小组件之上。
到目前为止,我已经创建了从QWidget继承的通知小部件。 通过将QMainWindow设置为其父级,我将其"浮动"在所有其他小部件的顶部。它不属于任何布局。 现在最大的问题是让它粘在右下角。我设法手动放置它,但现在我想在调整大小事件时移动它。
不幸的是,由于它不属于任何布局,因此它不会收到任何 resizeEvent,所以我无法重载 resizeEvent(( 函数。 尝试使QMainWindow在其resizeEvent方法中发出信号,但我对此方法并不满意。特别是因为在通知小部件构造函数中,我有这个connect(static_cast<MainWindow*>(parent), &MainWindow::resized, this, &Notification::update_position);
,它有点破坏了小部件的通用性,因为它的父级必须是MainWindow 小部件。
所以问题是一个小部件如何对另一个小部件事件做出反应? 就我而言,当通知小部件的父小部件被调整大小时,如何通知通知小部件?我忘了提到我不希望 MainWindow 小部件知道有关此通知小部件的任何信息。通知小部件可以单独管理。你只需调用类似new Notification(parent)
的东西,它就会自己做它的事情
欢迎任何想法, 提前致谢:)
您可以将通知小部件安装为其父级的事件过滤器,例如:
NotificationWidget::NotificationWidget(QWidget *parent) : QWidget(parent) {
parent->installEventFilter(this);
}
bool NotificationWidget::eventFilter(QObject *obj, QEvent *event) {
// normal event handling
bool ret = QObject::eventFilter(obj, event);
if (event->type() == QEvent::Resize) {
// Parent resized, adjust position
}
return ret;
}