0

Qt事件过滤器eventFilter

kievc
2022-12-5 1552 0
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);
}​
Qt
最新回复 (0)
    无评论

    暂无评论

返回