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

ナビゲーションに移動 検索に移動
392行目: 392行目:
  }
  }
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
== 複数キーとシグナル ==
以下の例では、[Ctrl] + [Shift] + [↓]キーを同時押下する時にシグナルを発行している。<br>
シグナルを受信するメソッドは、メッセージボックスを表示してソフトウェアを終了する。<br>
<br>
また、シグナルを使用せずにスロットを呼ぶことで同様のことが可能である。<br>
<syntaxhighlight lang="c++">
// Mainwindow.h
class MainWindow : public QMainWindow
{
Q_OBJECT
// ...略
protected:
    bool eventFilter(QObject *obj, QEvent *pEvent);
signals:
    void myCloseSIG();
private slots:
    void quitProgram();
// ...略
}
</syntaxhighlight>
<br>
<syntaxhighlight lang="c++">
// MainWindow.cpp
// コンストラクタでシグナルを終了処理関数に接続して、イベントフィルタをインストールする
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(this, SIGNAL(myCloseSIG()), this, SLOT(quitProgram()));
    installEventFilter(this);
}
// イベント処理
// [↓]キーを押下する場合、[Shift]キーと[Ctrl]キーが押下されていることを確認してシグナルを発行する
bool MainWindow::eventFilter(QObject *obj, QEvent *pEvent)
{
    if(pEvent->type() == QEvent::ShortcutOverride)
    {
      QKeyEvent *eKey = static_cast<QKeyEvent *>(pEvent);
      if(eKey->key() == Qt::Key_Down)
      {
          if((eKey->modifiers() & (Qt::ShiftModifier)) && (eKey->modifiers() & (Qt::ControlModifier)))
          {
            emit myCloseSIG();
            return true;
          }
      }
    }
    return false;
}
</syntaxhighlight>
<br>
<center>
表. 併用キー[enum Qt::KeyboardModifier]<br>
{| class="wikitable" style="background-color:#fefefe;"
|-
! style="background-color:#00ffff;" | 定義
! style="background-color:#00ffff;" | 意味
|-
| Qt::NoModifier || なし
|-
| Qt::ShiftModifier || Shift
|-
| Qt::ControlModifier || Ctrl
|-
| Qt::AltModifier || Alt
|-
| Qt::MetaModifier || Meta
|-
| Qt::KeypadModifier || Keypad
|}
</center>
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:Qt]]
[[カテゴリ:Qt]]

案内メニュー