Dans une recherche pour la gestion des événements (comme les mouvements de souris et les clics) et non par sous-classe, il faut utiliser installEventFilter
et fournir un gestionnaire d'événements. Ce faisant, j'ai rencontré un problème avec le support RTTI, ce qui signifie que typeid().name()
donne QObject *
tout le temps, quel que soit l'objet qui a été déclenché. Il y a, bien sûr, une autre solution --- dynamic_cast
suivie de null-pointeur, mais personnellement, je ne le trouve pas propre (et je voudrais éviter de multiples vérifications). Pour être plus précis, voici un exemple que je ne fais pas travailler avec Visual C++ avec RTTI activé (/ GR):Qt Problème 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");
*/
}
merci! c'est exactement ce que je cherchais! – MadH