Я пытаюсь создать графический интерфейс для приложения дополненной реальности, используя kinect.Идея состоит в том, чтобы использовать руки, обнаруженные при отслеживании скелета Kinect, для управления приложением с помощью жестов.
Этот вопрос не о жестах, так как эта часть моего приложения работает нормально.
В моем приложении я хочу имитировать щелчок мышью всякий раз, когда выполняется жест щелчка.Для этого я отправляю два события: одно, нажатие кнопки мыши и одно отпускание кнопки мыши, поскольку обычный щелчок также является серией нажатий и отпускания.
В QWebView все работает отлично.В окне браузера я могу «кликнуть» по ссылкам.
Но по какой-то причине я не могу "нажать" на QPushButton.Сигнал clicked () не излучается.У меня есть короткий пример для иллюстрации моей проблемы:
Сначала основная функция:
int main(int argc, char **argv){
QApplication app( argc, argv );
QWebViewButtons mainapp( 0, Qt::Window );
app.setActiveWindow( &mainapp );
mainapp.show();
mainapp.setApplication( &app ); //this is a setter to also get access to the main application in the widget
return app.exec();
}
Это мой собственный виджет:
QWebViewButtons::QWebViewButtons(QWidget* parent, Qt::WindowFlags flags ): QWidget(parent, flags ){
this->m_ui.setupUi( this );
QObject::connect( this->m_ui.pushButton, SIGNAL(clicked(bool)), this, SLOT( buttonClicked(bool) ) );
}
void QWebViewButtons::mousePressEvent( QMouseEvent* event ){
printf("mouse click, %d, %d\n", event->pos().x(), event->pos().y() );
}
void QWebViewButtons::buttonClicked( bool clicked ){
printf("slot button clicked\n");
}
void QWebViewButtons::keyPressEvent( QKeyEvent* event ){
printf("Key pressed\n");
QPoint pos( this->width()/2, this->height()/2 );
QPoint global = this->mapToGlobal(pos);
QWidget *w = this->m_app->widgetAt(global);
//printf("widget under point of click: %s", w);
QApplication::sendEvent( w, new QMouseEvent( QEvent::MouseButtonPress, pos, Qt::MouseButton::LeftButton, Qt::MouseButton::LeftButton, Qt::KeyboardModifier::NoModifier ) );
QApplication::sendEvent( w, new QMouseEvent( QEvent::MouseButtonRelease, pos, Qt::MouseButton::LeftButton, Qt::MouseButton::LeftButton, Qt::KeyboardModifier::NoModifier ) );
}
Я последовал предложению здесь: Qt Искусственные щелчки мыши не работают должным образом и отправлять, чтобы отправить события моей мыши непосредственно в QPushButton.Но это не помогло.Я также пытался отправить события мыши в «this» или в главное приложение.
Теперь у меня заканчиваются идеи.Я хочу, чтобы слот buttonClicked () вызывался, если я нажимаю любую клавишу.Но я только звоню, если я нажимаю кнопку с моей мышью.Как я могу сделать это?Или моя основная идея полностью ложна?
Спасибо за ваши идеи.