Qt プログラミング:QHelpEvent クラスによるヘルプ情報表示

2024-04-02

Qt GUI の QHelpEvent クラス

概要

  • 役割: 特定のポイントに関するヘルプ情報をリクエスト
  • 発生タイミング: ウィジェット上でマウスが動いたり、ヘルプキーが押されたり
  • 処理方法: イベントハンドラでヘルプ情報を表示
  • 関連クラス: QToolTip, QWhatsThis, QStatusTipEvent, QWhatsThisClickedEvent

メンバ関数

名前説明
type()イベントタイプ (QEvent::ToolTip または QEvent::WhatsThis)
pos()ウィジェット内でのマウスカーソル位置
globalPos()グローバル座標系でのマウスカーソル位置
globalX()グローバル座標系での X 座標
globalY()グローバル座標系での Y 座標

class MyWidget : public QWidget {
  public:
    MyWidget() {
      // ...
      setWhatsThis("このウィジェットは何か?");
    }

  protected:
    void helpEvent(QHelpEvent *event) override {
      if (event->type() == QEvent::WhatsThis) {
        // ヘルプテキストを表示
        QWhatsThis::showText(event->globalPos(), this->whatsThis());
      } else {
        // ツールチップを表示
        QToolTip::showText(event->globalPos(), "ツールチップテキスト");
      }
    }
};

補足

  • QHelpEvent は QEvent クラスを継承している


QHelpEvent クラスのサンプルコード

ツールチップ表示

class MyWidget : public QWidget {
  public:
    MyWidget() {
      // ...
      setToolTip("このウィジェットは何か?");
    }

  protected:
    void helpEvent(QHelpEvent *event) override {
      if (event->type() == QEvent::ToolTip) {
        // ツールチップを表示
        QToolTip::showText(event->globalPos(), this->toolTip());
      }
    }
};

カスタム "ヘルプ" ウィジェット表示

class MyHelpWidget : public QWidget {
  public:
    MyHelpWidget() {
      // ...
      // ヘルプテキストを表示するラベル
      QLabel *label = new QLabel("ここにヘルプテキストを表示", this);
    }
};

class MyWidget : public QWidget {
  public:
    MyWidget() {
      // ...
      setWhatsThis("このウィジェットは何か?");
    }

  protected:
    void helpEvent(QHelpEvent *event) override {
      if (event->type() == QEvent::WhatsThis) {
        // カスタムヘルプウィジェットを表示
        MyHelpWidget *helpWidget = new MyHelpWidget();
        helpWidget->show();
        helpWidget->move(event->globalPos());
      }
    }
};

QWhatsThis クラスと連携

class MyWidget : public QWidget {
  public:
    MyWidget() {
      // ...
      setWhatsThis("このウィジェットは何か?");
    }

  protected:
    void helpEvent(QHelpEvent *event) override {
      if (event->type() == QEvent::WhatsThis) {
        // QWhatsThis クラスを使用してヘルプテキストを表示
        QWhatsThis::showText(event->globalPos(), this->whatsThis());
      }
    }
};

QStatusTipEvent クラスと連携

class MyWidget : public QWidget {
  public:
    MyWidget() {
      // ...
      setStatusTip("このウィジェットは何か?");
    }

  protected:
    void helpEvent(QHelpEvent *event) override {
      if (event->type() == QEvent::ToolTip) {
        // ステータスバーにツールチップを表示
        QStatusBar *statusBar = this->window()->statusBar();
        statusBar->showMessage(this->toolTip());
      }
    }
};


QHelpEvent クラスの代替方法

QToolTip クラスは、ウィジェットにマウスがホバーした時にツールチップを表示する機能を提供します。

class MyWidget : public QWidget {
  public:
    MyWidget() {
      // ...
      setToolTip("このウィジェットは何か?");
    }
};

QWhatsThis クラスは、ウィジェットに "ヘルプ" ボタンを追加し、ボタン押下時にヘルプテキストを表示する機能を提供します。

class MyWidget : public QWidget {
  public:
    MyWidget() {
      // ...
      setWhatsThis("このウィジェットは何か?");
    }
};

カスタムヘルプウィジェット

上記の方法以外にも、独自のヘルプウィジェットを作成して、ウィジェットヘルプ機能を実装することができます。

class MyHelpWidget : public QWidget {
  public:
    MyHelpWidget() {
      // ...
      // ヘルプテキストを表示するラベル
      QLabel *label = new QLabel("ここにヘルプテキストを表示", this);
    }
};

class MyWidget : public QWidget {
  public:
    MyWidget() {
      // ...
      // ヘルプボタン
      QPushButton *helpButton = new QPushButton("ヘルプ", this);
      connect(helpButton, &QPushButton::clicked, this, &MyWidget::showHelp);
    }

  private slots:
    void showHelp() {
      // カスタムヘルプウィジェットを表示
      MyHelpWidget *helpWidget = new MyHelpWidget();
      helpWidget->show();
    }
};

どの方法を選択するかは、アプリケーションの要件によって異なります。

  • シンプルなツールチップを表示したい場合は、QToolTip クラスが最も簡単です。
  • より詳細なヘルプ情報を提供したい場合は、QWhatsThis クラスまたはカスタムヘルプウィジェットを使用することができます。



Qt GUI で QPainterPath::angleAtPercent() 関数を使ってパスの接線方向を取得する

QPainterPath::angleAtPercent() 関数は、パス上の指定された点における接線の角度を取得します。これは、パスに沿って移動するオブジェクトの向きを制御したり、パスに沿ってテキストを描画したりするなど、さまざまな場面で役立ちます。



C++ 프로그래밍: QPageSize::isValid() 함수를 사용하여 유효한 페이지 크기를 확인하는 방법

概要:引数: なし戻り値: bool 型 true: オブジェクトが有効 false: オブジェクトが無効true: オブジェクトが有効false: オブジェクトが無効詳細:QPageSize オブジェクトは、印刷時に使用される紙のサイズを表します。


QSurfaceFormat::redBufferSize() 関数のサンプルコード

概要:機能: 赤色チャネルのビット数取得/設定影響: 画像の色精度関連クラス: QSurfaceFormat関連ヘッダーファイル: <QSurfaceFormat>詳細:デフォルト値: 8 ビット有効範囲: 1 ~ 32 ビットビット数と色精度: 8 ビット: 256 色 (2^8)


Qt GUIにおけるOpenGLコンテキストグループの共有: QOpenGLContextGroup::shares()の徹底解説

QOpenGLContextGroup::shares() は、Qt GUIにおけるOpenGLコンテキストグループ間のリソース共有を判定するためのメソッドです。このメソッドは、2つのOpenGLコンテキストが同じリソースセットを共有しているかどうかを調べ、共有関係を判断します。


QOpenGLExtraFunctions::glGetInteger64i_v()の徹底解説

QOpenGLExtraFunctions::glGetInteger64i_v()は、OpenGL拡張機能を利用して、64ビット整数の配列を取得するための関数です。Qt GUIでOpenGLを利用する際、シェーダープログラムの状態情報やフレームバッファオブジェクトの情報などを取得するのに役立ちます。



Qt WidgetsのQComboBox::itemData()を使いこなしてレベルアップ

概要役割: アイテムに関連付けられたユーザーデータを取得引数: index: アイテムのインデックス role: 取得するデータの種類index: アイテムのインデックスrole: 取得するデータの種類戻り値: アイテムデータ詳細index は、コンボボックス内のアイテムのインデックスを指定します。


Qt Widgets:QLineEdit::editingFinished()シグナルでテキスト処理をパワーアップ

QLineEdit::editingFinished()シグナルは、Qt WidgetsモジュールのQLineEditクラスで提供されるシグナルです。このシグナルは、ユーザーがLineEditウィジェットの編集を完了したときに発生します。詳細


QPlainTextEditを使って軽量な読み取り専用テキストエディットを作成する方法

QTextEdit は、Qt Widgetsフレームワークにおいてテキスト編集用のウィジェットを提供します。 QTextEdit::readOnly プロパティは、ユーザーがテキストを編集できるかどうかを制御します。機能読み取り専用モードQTextEdit::readOnly を true に設定すると、ユーザーはテキストを選択したり、コピーしたりすることはできますが、編集することはできません。これは、ドキュメントを表示したり、ユーザー入力を制限したい場合に便利です。


Qt Widgets に関するサンプルコード集

概要QWidgetItem::expandingDirections() メソッドは、Qt Widgetsにおけるレイアウトアイテムがどの方向に拡張できるかを指定するために使用されます。これは、レイアウトマネージャーがアイテムを配置およびサイズ調整する際に役立ちます。


Qt WidgetsにおけるQGraphicsEffectクラスの解説: デストラクタ関数QGraphicsEffect::~QGraphicsEffect()

QGraphicsEffect::~QGraphicsEffect()は、Qt WidgetsにおけるQGraphicsEffectクラスの仮想デストラクタ関数です。この関数は、QGraphicsEffectオブジェクトが破棄されるときに自動的に呼び出され、以下の処理を行います。