たとえば、次のようにします。
// receiver is a pointer to QObject
QCoreApplication::postEvent (receiver, event);
詳細については、こちらをご覧ください。
再実装QObject::event()
するかQWidget::keyPressEvent
、ウィジェットで主要なイベントを受け取ることができます。詳細については、このリンクまたはリンクにアクセスしてください。2 つのボタンと 1 つのラベルで構成される以下のコード例を参照してください。クリックするとpushButton
、「Enter Press」がpushButton_2
送信され、「文字 A が押されました」が送信されます。関数でキー イベントが受信され、event()
それに応じてラベルが更新されます。
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(sendKeyEvent()));
connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(sendKeyEvent()));
}
void MainWindow::sendKeyEvent()
{
QObject* button = QObject::sender();
if (button == ui->pushButton)
{
QKeyEvent *event = new QKeyEvent (QEvent::KeyPress, Qt::Key_Enter, Qt::NoModifier);
QCoreApplication::postEvent (this, event);
}
else if (button == ui->pushButton_2)
{
QKeyEvent *event = new QKeyEvent (QEvent::KeyPress, Qt::Key_A, Qt::NoModifier);
QCoreApplication::postEvent (this, event);
}
}
bool MainWindow::event(QEvent *event)
{
if (event->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if (keyEvent->key() == Qt::Key_Enter) {
ui->label->setText("Enter received");
return true;
}
else if (keyEvent->key() == Qt::Key_A)
{
ui->label->setText("A received");
return true;
}
}
return QWidget::event(event);
}