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

📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

 
(同じ利用者による、間の5版が非表示)
49行目: 49行目:
*: 未処理のキーイベントを適切に処理するため、デフォルトケースで基底クラスの<code>keyPressEvent</code>を呼び出すことが推奨される。
*: 未処理のキーイベントを適切に処理するため、デフォルトケースで基底クラスの<code>keyPressEvent</code>を呼び出すことが推奨される。
* キーの繰り返し
* キーの繰り返し
*: 長押しによるキーの繰り返しを区別する場合は、QKeyEventクラスのisAutoRepeatメソッドを使用する。
*: 長押しによるキーの繰り返しを区別する場合は、<code>QKeyEvent</code>クラスの<code>isAutoRepeat</code>メソッドを使用する。
* イベントの受理
* イベントの受理
*: 特定のキーイベントを完全に処理したことを示すため、QKeyEventクラスのacceptメソッドを呼び出す。
*: 特定のキーイベントを完全に処理したことを示すため、<code>QKeyEvent</code>クラスの<code>accept</code>メソッドを呼び出す。
*: <br>
*: イベントを完全に処理した後、それ以上の伝播を望まない場合は、<code>QKeyEvent</code>クラスの<code>accept</code>メソッドを呼び出す。
*: イベントを処理した後、他のウィジェットやハンドラにも処理の機会を与える場合は、<code>QKeyEvent</code>クラスの<code>ignore</code>メソッドを呼び出す、あるいは、何もしない。
<br>
<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
114行目: 117行目:
     if (pEvent->isAutoRepeat()) {
     if (pEvent->isAutoRepeat()) {
       qDebug() << "Key is auto-repeating";
       qDebug() << "Key is auto-repeating";
    }
}
</syntaxhighlight>
<br><br>
== モディファイアキーとの組み合わせ ==
[Ctrl]キーあるいは[Shift]キー等のモディファイアキーと組み合わせる場合は、<code>QKeyEvent</code>クラスの<code>modifiers</code>メソッドを使用する。<br>
<br>
<u>※注意</u><br>
<u>モディファイアキーと組み合わせた特定のアクションを実行する場合、そのアクションが完全にイベントを消費するならば、<code>accept</code>メソッドを実行する。</u><br>
<u>モディファイアキーの状態を記録または確認するだけの場合、<code>accept</code>メソッドは実行せずに、そのイベントを他のハンドラへ渡すほうがよい。</u><br>
<br>
<syntaxhighlight lang="c++">
// Mainwindow.h
// ...略
protected:
    void keyPressEvent(QKeyEvent *pEvent);
</syntaxhighlight>
<br>
<syntaxhighlight lang="c++">
// Mainwindow.cpp
// 押下したキー名をデバッグ出力する
// その他のキーは、16進数を出力する
void MainWindow::keyPressEvent(QKeyEvent *pEvent)
{
    // モディファイアキーの制御
    if (pEvent->modifiers() & Qt::ControlModifier) {
      if (pEvent->key() == Qt::Key_C) {
          // 特定のキーイベントのみを消費する場合
          qDebug() << "[Ctrl] + [C] pressed";
          pEvent->accept();
      }
      else {
          // ロギングのみを行う場合
          qDebug() << "Ctrl is pressed with" << pEvent->key();
      }
    }
    else {
      // それ以外の場合は、基底クラスを呼び出すことにより、他のウィジェットやハンドラがイベントを処理する機会を与えることが可能
      QMainWindow::keyPressEvent(pEvent);  // 基底クラスの呼び出し
     }
     }
  }
  }
538行目: 584行目:
</center>
</center>
<br><br>
<br><br>
{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


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