Qt事件模型一个强大的功能就是能够监视其它控件的事件,比如监控本窗口自身内的某个控件的事件,甚至监控另外一个窗口的事件
事件过滤器使用方法
1、在目标对象上调用installEventFilter(),注册监视对象
2、重写eventFilter函数(在自身窗口类中监控其它对象事件,也可以监控自身类窗口事件)
模态窗口随父窗口移动始终保持相对位置不变
//模态窗口类构造时,需要传入父窗口指针,通过下面的代码给父窗口安装事件过滤器
QObject * pObj = (QObject*)pParent;
if (pObj != NULL)
{
pObj->installEventFilter(this);
}
//重写eventFilter方法
bool CTimerWaitDialog::eventFilter(QObject*obj, QEvent *e)
{
if (obj == parent())
{
if (e->type() == QEvent::Move)
{
QWidget* pParent = parentWidget();
if (pParent != NULL)
{
const QPoint ptShow = QPoint((pParent->width() - width()) / 2, (pParent->height() - height()) / 2);
QPoint ptGShow = pParent->mapToGlobal(ptShow);
this->move(ptGShow);
}
}
}
return QWidget::eventFilter(obj, e);
}
暂无评论