서브 클래 싱이 아닌 이벤트 (마우스 이동 및 클릭과 같은)를 처리하기 위해, installEventFilter
을 사용하고 이벤트 핸들러를 제공해야합니다. 그렇게하는 동안 RTTI 지원에 문제가 발생하여 어떤 객체 이벤트가 트리거되었는지에 상관없이 typeid().name()
은 항상 QObject *
이됩니다. 물론, 또 다른 해결책이 있습니다 --- dynamic_cast
다음에 null 포인터 검사가 있지만 개인적으로 나는 그것을 깨끗하게 찾지 못합니다 (여러 검사를 피하고 싶습니다). - typeid
의 당신은 일반적으로 포인터의 역 참조에 typeid
를 사용해야합니다Qt RTTI 문제
bool
MousePressInterface::eventFilter
(QObject *obj,
QEvent *event)
{
if (event->type() == QEvent::MouseButtonPress)
{
ColorPicker *sender;
sender = dynamic_cast<ColorPicker *> (obj);
if (sender)
{
QColor newColor =
QColorDialog::getColor(sender->color());
if (newColor.isValid())
sender->setColor(newColor);
Logger::log("color picker clicked");
return true;
}
/* TODO: cleaner way, doesn't work for some reason!
Logger::log(QString("mouse pressed on %1").arg(typeid(obj).name()));
Logger::log(QString(" checking for %1").arg(typeid(ColorPicker *).name()));
if (typeid(obj) == typeid(ColorPicker *))
Logger::log("color picker clicked");
*/
}
thanks! 그게 내가 찾고 있던거야! – MadH