2016-09-01 6 views
-1

私はubunutuでQtを使用しています。カーソルを押したときにカーソルを移動し、カーソルを移動したときにメニューを表示したい

こんにちは、プッシュボタンのメニューがあります。私は、カーソルが押しボタンの上を移動するときにメニューを表示し、カーソルが移動したときにメニューを閉じるようにしたい。

ありがとうございます。

+1

ようこそstackoverflow。それを読んで質問を調整してください:http://stackoverflow.com/help/how-to-ask試したことのある情報(またはSSCCE)を提供し、質問を明確にする必要があります。 –

答えて

0

あなたはowen QPushButtonを実装する必要があります。まず、マウスがウィジェットをホバーしたときに処理するMouseMoveEventをチェックしてみましょう。

cursosのposが自分のウィジェット内にあるかどうかを確認するには、次の

void CustomPushButton::mousePressEvent(QMouseEvent *e) { 
    const QRect widgetRect = ui->followersWidget->geometry(); 
    const QPoint mousePos = ui->followersWidget->mapFromGlobal(QCursor::pos()); // or e->pos() 
    if (widgetRect.contains(mousePos)) { 
     // Mouse inside the widget, lets show the menu 
    } else { 
     // Mouse outside the widget, if the menu is open, close it. 
    } 
    QWidget::mousePressEvent(e); 
} 

あなたはQtのドキュメントから、QMenu::popup(..)を使用することができ、メニューを表示/非表示するには、次のように

は、メニューを表示しますaction atActionは指定されたグローバル位置pになります。ウィジェットのローカル座標をグローバル座標に変換するには、QWidget :: mapToGlobal()を使用します。

+0

私はこのコードをどこに置くのですか教えてください。私はクラスSimplePlayerを持っています。私のプッシュボタン名はui-> userです。 –

+0

QWidgetのサブクラスで独自のQPushButtonをカスタマイズし、保護された仮想関数void mousePressEvent(QMouseEvent * e)を再実装する必要があります。詳細はhttp://www.informit.com/articles/article.aspx?p=1405227&seqNum=2を参照してください。 – mohabouje

+1

mousePressEventではなく、mouseMoveEventを再実装する必要があると思います – brembo

1

「ホバー」イベントのポップアップメニューを表示すると、ユーザーがボタンをクリックしたときにポップアップが表示されることが予想されるため、ユーザーエクスペリエンスに違反しているようです。これはメニューボタンと呼ばれます。 ホバーイベントを実際に使用する場合は、QPushButtonクラスをサブクラス化し、それぞれのイベントを使用することができます。 QPushButton::setMenu

QMenu *menu = new QMenu(); 
QAction *testAction = new QAction("test menu item", this); 
menu->addAction(testAction); 

button->setMenu(menu); 

enter image description here

Documentation:あなたはメニューボタンを使用したい場合は、あなたはこれを試すことができます。