5

ホバーするとボタン (「オープナー」) の下または横に開くウィジェット (いくつかの編集ボックスとスライダーを含む) を実装したいと考えています。重要なのは、それが一時的なウィジェットであることです。フォーカスが失われるとすぐに消えてしまいます。また、理想的にはオープナーに矢印を向けて、オープナーのすぐ隣にポップアップするようにします。

つまり、これは基本的にツールチップです。ただし、ボタンやスライダーなどを備えたウィジェットである必要があります。カスタム ウィジェットを作成したり、すべてのマウス イベントとフォーカス イベントのハンドラーを作成したり、ウィジェットを開くたびに、またはオープナーが移動するたびに理想的な位置を再計算したりせずに、それを実装する賢い方法はありますか?

4

1 に答える 1

3
class OpenerButton : public QPushButton
{
public:
    OpenerButton(QWidget * parent = 0);
protected:
    void enterEvent(QEvent *e);
    void leaveEvent(QEvent *e);
};

OpenerButton::OpenerButton(QWidget * parent)
      : QPushButton(parent)
{
   //Do necessary initializations For ex:set a menu for opener button 
}

void OpenerButton::leaveEvent(QEvent * e)
{
          //hide the popup_menu
}

void OpenerButton::enterEvent(QEvent * e)
{
    //Show the menu
    //You can use animation for ex:
     Popup_menu=new Popup_Dialog(this);//Popup_Dialog is a dialog containing all your widgets
     QPropertyAnimation *animation = new QPropertyAnimation(Popup_menu,"geometry");
     animation->setDuration(500);
     animation->setDirection(QAbstractAnimation::Forward);
     QRect startRect(Rect_Relative_to_Opener_Button);
     QRect endRect(Shifted_Rect_Relative_to_Opener_Button);
     animation->setStartValue(startRect);
     animation->setEndValue(endRect);
     animation->start();

}

Entereventマウスカーソルがウィジェットに入ると呼び出されます。同様leaveeventに、マウスカーソルがウィジェットから離れたとき。

于 2012-06-04T04:36:14.797 に答える