3
小玩具應用程序可以在這裏找到:http://gist.github.com/517445Qt的人工點擊鼠標不工作正常
我想送鼠標人工事件,窗口小部件,我使用的QApplication ::的SendEvent對於這一點,接下來我檢查ev.isAccepted()並返回False,更糟!小部件我發送的事件並沒有處理它(它是日曆部件,沒有選擇日期),我懷疑它甚至收到它,因爲我可以看到mouseEventPressed是如何在父窗口部件上啓動的。
的Qt代碼:
#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);
}
根據源代碼的QApplication ::的SendEvent調用小窗口>事件()這對於QCalendarWidget是QAbstractScrollArea這對於每個鼠標相關返回false結束了在事件。
如果我是對的,那我該如何模擬鼠標點擊和按鍵?
你想解決什麼問題?我無法想象需要模擬鼠標點擊的很多情況。除了觸發按鈕,但他們有點擊()。 – 2010-08-11 12:13:20
我將Qt應用程序作爲紋理嵌入到3D引擎中。我希望用戶能夠點擊紋理並與應用進行交互。 – redbaron 2010-08-19 10:49:55