3

Qt のコールバック関数を使用して、HAL からキー値を取得できます。によってそのキーのイベントが作成されました

QKeyEvent *event = new QKeyEvent (QEvent::KeyPress, 
                                  inputKey.keyValue, 
                                  Qt::NoModifier);

注: inputKey.keyValueHAL レイヤーから受け取ったキー値。

ここで、このキー イベントを Qt に登録する必要があります。これにより、IR リモートでキーが押された場合に、それぞれのフォームで、keyPressEvent(e)またはevent(e)呼び出されるようになります。キーの押下に基づいて、特定のアクションが実行されます。

注:キープレスイベントがトリガーされる複数のフォームがあり、複数のキーがそこにあります「Page_Up、Page_Down、Okキーなど...」

Postevent() と connect(.......) を呼び出そうとしましたが、何も役に立ちませんでした。KeyPressEvent() が実行されていません。

4

2 に答える 2

4

たとえば、次のようにします。

// 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);
}
于 2015-08-25T06:04:28.350 に答える