petite application de jouet se trouve ici: http://gist.github.com/517445travail Qt artificielle clics de souris ne marche pas correctement
Je suis en train d'envoyer un événement de souris artificielle widget et j'utilise QApplication :: sendEvent pour que, à côté je vérifie ev.isAccepted() et retourne False, encore pire! Widget J'ai envoyé un événement à ne pas le gérer (il s'agit d'un calendrier étendu et aucune date n'est sélectionnée) et je doute qu'il le reçoive, car je peux voir comment mouseEventPressed est activé sur le widget parent.
Qt code:
#include "calendar.h"
Calendar::Calendar(QWidget *parent) :
QWidget(parent)
{
qCal = new QCalendarWidget;
qBtn = new QPushButton(tr("Press me"));
connect(qBtn, SIGNAL(clicked()), this, SLOT(testCustomClick()));
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(qCal);
layout->addWidget(qBtn);
setLayout(layout);
qDebug() << "Date:" << QDate::currentDate();
}
Calendar::~Calendar()
{
}
void Calendar::testCustomClick()
{
QMouseEvent qm2(QEvent::MouseButtonPress, QPoint(qCal->width()/2,
qCal->height()/2), Qt::LeftButton , Qt::LeftButton, Qt::NoModifier);
QApplication::sendEvent(qCal, &qm2);
//this one is always False
qDebug() << "isAccepted: " << qm2.isAccepted();
}
void Calendar::mousePressEvent(QMouseEvent* ev)
{
//this is executed even for QMouseEvent which sended to qCal =((
//if we click on qCal with real mouse it is not executed
qDebug() << "mouse event: " << ev << "x=" << ev->x() <<" y=" << ev->y();
QWidget::mousePressEvent(ev);
}
Selon le code source QApplication :: sendEvent appelle widget-> événement() qui pour QCalendarWidget est fini dans QAbstractScrollArea qui retourne false pour chaque souris connexes un événement.
Si j'ai raison, comment puis-je émuler les clics et les pressions de la souris?
quel problème voulez-vous résoudre? Je ne peux pas penser à autant de cas où il faut émuler les clics de souris. Sauf peut-être pour les boutons de déclenchement, mais ils ont un clic(). –
J'intègre l'application Qt en tant que texture dans un moteur 3D. J'aimerais que les utilisateurs puissent cliquer sur la texture et interagir avec l'application. – redbaron