私はubunutuでQtを使用しています。カーソルを押したときにカーソルを移動し、カーソルを移動したときにメニューを表示したい
こんにちは、プッシュボタンのメニューがあります。私は、カーソルが押しボタンの上を移動するときにメニューを表示し、カーソルが移動したときにメニューを閉じるようにしたい。
ありがとうございます。
私はubunutuでQtを使用しています。カーソルを押したときにカーソルを移動し、カーソルを移動したときにメニューを表示したい
こんにちは、プッシュボタンのメニューがあります。私は、カーソルが押しボタンの上を移動するときにメニューを表示し、カーソルが移動したときにメニューを閉じるようにしたい。
ありがとうございます。
あなたは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()を使用します。
私はこのコードをどこに置くのですか教えてください。私はクラスSimplePlayerを持っています。私のプッシュボタン名はui-> userです。 –
QWidgetのサブクラスで独自のQPushButtonをカスタマイズし、保護された仮想関数void mousePressEvent(QMouseEvent * e)を再実装する必要があります。詳細はhttp://www.informit.com/articles/article.aspx?p=1405227&seqNum=2を参照してください。 – mohabouje
mousePressEventではなく、mouseMoveEventを再実装する必要があると思います – brembo
「ホバー」イベントのポップアップメニューを表示すると、ユーザーがボタンをクリックしたときにポップアップが表示されることが予想されるため、ユーザーエクスペリエンスに違反しているようです。これはメニューボタンと呼ばれます。 ホバーイベントを実際に使用する場合は、QPushButton
クラスをサブクラス化し、それぞれのイベントを使用することができます。 QPushButton::setMenu
上
QMenu *menu = new QMenu();
QAction *testAction = new QAction("test menu item", this);
menu->addAction(testAction);
button->setMenu(menu);
Documentation:あなたはメニューボタンを使用したい場合は、あなたはこれを試すことができます。
ようこそstackoverflow。それを読んで質問を調整してください:http://stackoverflow.com/help/how-to-ask試したことのある情報(またはSSCCE)を提供し、質問を明確にする必要があります。 –