stackedWidget을 가지고 있으며, 해당 자식 유형의 모든 mouseClickEvents를 독립형으로 캡처하려고합니다. 나중에 추가하고 제거 할 수 있습니다 (삭제되지 않은 stackedWidget에서 제거됨). 이 작품을 어떻게 만들 수 있습니까?Qt : 자식 전에 이벤트 캡처
당신은 당신의 자식 위젯에 이벤트 필터를 설치할 수 있습니다
1
A
답변
0
는 이벤트 필터는 새로운 클래스가 될 수 있습니다 또는 중요한 것은있는 기존의 클래스는이 eventFilter 방법을 구현하고
QObject를
에서에서 변형 된 예 (상속 Documenation)bool FilterObject::eventFilter(QObject *obj, QEvent *event)
{
if (obj == textEdit) {
if (event->type() == QEvent::mousePress) {
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
qDebug() << "Ate mouse press" << mouseEvent->x() << " " << mouseEvent->y();
return true;
} else {
return false;
}
} else {
// pass the event on to the parent class
return FilterObject::eventFilter(obj, event);
}
}
당신은 찾을 수 위젯이
FilterObject * filterObj = new FitlerObject(this);
Q_FOREACH(QObject obj, pWin->children())
{
obj->installEventFilter(filterObj);
}
을 만든 후 이벤트 필터를 설치하려면 다음을 수행 여기 http://qt-project.org/doc/qt-4.8/qobject.html#eventFilter 및 http://qt-project.org/doc/qt-4.8/qobject.html#installEventFilter
0
아이를 얻는 방법에 대한 설명에서 전체 DOCO 이벤트를 제어합니다
http://falsinsoft.blogspot.com/2014/04/qt-get-child-controls-events.html
기본적으로 방법은 이미 제안 이벤트 필터입니다. 그러나 "문제"는 윈도우 GUI가 Qt 디자이너 도구를 통해 관리되는 경우 필터를 설치하는 방법입니다. 이 경우 자식 컨트롤을 만드는 코드를 직접 제어 할 수 없으며 대신 다른 방법을 사용하여 주 개체의 "ChildAdded"이벤트를 가져 와서 설명 된대로 각 새 자식 컨트롤에 필터를 설치해야합니다. 위의 링크.