「Qtのコントロール - キーボード」の版間の差分

ナビゲーションに移動 検索に移動
188行目: 188行目:
   
   
  // コンストラクタでイベントフィルタをインストールする
  // コンストラクタでイベントフィルタをインストールする
  MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
  MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
  {
  {
    ui->setupUi(this);
     installEventFilter(this);
     installEventFilter(this);
  }
  }
281行目: 282行目:
       default:
       default:
           qDebug("release %x", event->key());
           qDebug("release %x", event->key());
          return false;
    }
    return true;
}
</syntaxhighlight>
<br>
==== 方法 4 ====
一括処理でKeyPressイベントを取得する場合は、<code>QEvent::ShortcutOverride</code>を使用して、標準ショートカットを上書きする。<br>
ただし、同じキーが2つセット(PressとRelease)で来るので注意が必要である。<br>
<syntaxhighlight lang="c++">
// MainWindow.h
class MainWindow : public QMainWindow
{
Q_OBJECT
// ...略
// イベントフィルタとメソッドを宣言する
protected:
    bool eventFilter(QObject *obj, QEvent *pEvent);
private:
    bool MyKeyPress(QKeyEvent *pEvent);
// ...略
}
</syntaxhighlight>
<br>
<syntaxhighlight lang="c++">
// MainWindow.cpp
// コンストラクタでイベントフィルタをインストールする
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    installEventFilter(this);
}
// ShortcutOverrideで標準ショートカットを上書きしてKeyPressを取得する
bool MainWindow::eventFilter(QObject *obj, QEvent *pEvent)
{
    bool bRtn = false;
    if(pEvent->type() == QEvent::ShortcutOverride)
    {
      bRtn = MyKeyPress(static_cast<QKeyEvent *>(pEvent));
    }
    return bRtn;
}
// キー押下時の処理
// スイッチを使用して1つ破棄する
bool MainWindow::MyKeyPress(QKeyEvent *pEvent)
{
    static int sw = -1;
    if(pEvent->isAutoRepeat())
    {
      return true;
    }
    if(pEvent->key() == sw)
    {
      sw = -1;
      return true;
    }
    sw = pEvent->key();
    switch(pEvent->key())
    {
      case Qt::Key_Escape:
          qDebug() << "Esc ScutOver";
          break;
      case Qt::Key_Return:
          qDebug() << "Return ScutOver";
          break;
      case Qt::Key_Enter:
          qDebug() << "Enter(keypad) ScutOver";
          break;
      case Qt::Key_Home:
          qDebug() << "Home ScutOver";
          break;
      case Qt::Key_Left:
          qDebug() << "Left ScutOver";
          break;
      case Qt::Key_Down:
          qDebug() << "Down ScutOver";
          break;
      case Qt::Key_Space:
          qDebug() << "Space ScutOver";
          break;
      case Qt::Key_F1:
          qDebug() << "F1 ScutOver";
          break;
      case Qt::Key_0:
          qDebug() << "0(keypad) ScutOver";
          break;
      default:
          qDebug("ScutOver %x", pEvent->key());
           return false;
           return false;
     }
     }

案内メニュー