4

コンテナー ウィジェットがfocus/visibleを取得したときに、デフォルトでツールチップが表示されるようにします。

それぞれのコントロールにマウスを合わせることなくツールチップを表示したい。

4

1 に答える 1

4

ウィジェットをサブクラス化し、ツールチップ表示を生成するイベントのハンドラをオーバーライドする必要があります。ハンドラーでQHelpEventof 型QEvent::ToolTipを作成し、イベント ループでキューに入れます。最後に、親の元のハンドラーを呼び出して、最初に意図したことを実行させます。

したがって、特にボタンにフォーカスを当てる場合は、次のようになります

class MyButton : public QPushButton {
  virtual void focusInEvent(QFocusEvent *) {
    if(evt->gotFocus()) {
      QPoint pos(0,0);
      QHelpEvent* help = new QHelpEvent(
        QEvent::ToolTip,pos,this->mapToGlobal(pos));
      QCoreApplication::postEvent(this,help);
    }
    QPushButton::focusInEvent(evt);
  }
}

可視性のために、オーバーライドします

void QWidget::showEvent(QShowEvent * event);

同様のコードを実行します。posもともとツールチップはここにはないマウスの位置に依存するため、好みに合わせて調整する必要があります。また、ウィジェットをフォーカスおよび/または可視化することを非常に厳密に制御してください。デフォルトでは、何かが常にフォーカスされるため、ツールチップがいたるところに表示されます。

于 2012-09-12T11:25:30.880 に答える