일부 코드에서 Qt4에서 Qt5로 마이그레이션 할 때 응용 프로그램에서 이벤트를 필터링해야하지만 더 이상 작동하지 않습니다. 내 소프트웨어는 "에디션 모드"에서 모든 이벤트를 필터링해야하므로 일부 위젯/버튼 만 사용 가능/클릭 할 수 있습니다.이벤트 필터에서 Qt5로 QWidgetWindow를 사용합니다.
나는 QVector
의 포인터가 QWidget
이고 eventFilter
포인터 인 클래스 InputGrabber
을 가지고 있습니다. eventFilter이 기능에 코드가 같이 간다,
_inputGrabber->add (_gpView);
_inputGrabber->add (_gpView->viewport());
_inputGrabber->add (_gpView->horizontalScrollBar());
_inputGrabber->add (_gpView->verticalScrollBar());
_inputGrabber->add (_view->mainWindow().toolBarMap()["editSquel"]);
다음 :에 전달할 때 "편집"모드, 내가 사용할 수 있습니다 내 InputGrabber
의 QVector
에 위젯 '포인터를 추가
bool InputGrabber::eventFilter (QObject* object, QEvent* anevent)
{
if (QInputEvent* event = dynamic_cast <QInputEvent*> (anevent))
{
QWidget* widget = dynamic_cast <QWidget*> (object);
if (widget)
{
if (_widgetList.contains (widget) || _widgetList.contains (widget->parentWidget()))
return QObject::eventFilter (object, event);
else if (QDialog* dlg = dynamic_cast <QDialog*> (widget))
return QObject::eventFilter (object, event);
else if (QDialogButtonBox* dlg = dynamic_cast <QDialogButtonBox*> (widget->parentWidget()))
return QObject::eventFilter (object, event);
else
return true;
}
else
return true;
}
else
return QObject::eventFilter (object, event);
}
}
객체가에서 상속 할 때
QWidget* widget = dynamic_cast <QWidget*> (object);
반환 NULL
:
Qt5로 마이그레이션 문제는 그 다음 캐스트입니다.
동일한 문제가있는 사람이 누구나 동일한 전략을 따르는 솔루션을 얻었습니까? 소프트웨어의 동작을 바꾸고, 모든 위젯에서 루프를 만들고, 각각에 대해 setDisabled()
을 설정하고 싶지 않습니다.
대단히 감사합니다! 당신이 명시 적으로 true를 반환하거나하지 않는 경우,이 방법
bool InputGrabber::eventFilter (QObject* object, QEvent* anevent)
{
if (QInputEvent* event = dynamic_cast <QInputEvent*> (anevent))
{
//etc
}
return QObject::eventFilter (object, anevent);
}
:
return QObject::eventFilter (object, event);
이
return QObject::eventFilter (object, anevent);
가능성이 있어야한다 :
'dynamic_cast'를 사용해야하는 진정한 이유가 있습니까? 'qobject_cast' insted를 시도하십시오. 그것은 같은 구문을 가지고 있으며 더 빨리 작동합니다. –
'QWidgetWindow' 란 무엇입니까? 'QWindow '를 의미합니까? 그렇다면'QWindow' 파생 클래스에 대한'QWidget' 논리를 단순히 반복해서는 안되는 이유는 무엇입니까? –
'QWidgetWindow'는 Qt5에서'QWidget'을 상속받지 않고'QWidget'을 상속받습니다. 따라서 dynamic_cast와 qobject_cast 모두'NULL'을 반환합니다. –