I want to show menu when cursor hovers over pushbutton and close menu when cursor is moved away

时间:2016-09-01 06:07:59

标签: qt

I am using Qt on ubunutu.

Hello, I have a menu on pushbutton. I want to show menu when cursor hovers over pushbutton and close menu when cursor is moved away.

Thanks in advance.

2 个答案:

答案 0 :(得分:1)

在" hover"上显示弹出菜单事件似乎违反了用户体验,因为用户希望在单击按钮时看到弹出窗口。这称为菜单按钮。如果您确实想使用 hover 事件,则可以继承QPushButton类并使用其各自的事件。但是,如果您想使用菜单按钮,可以试试这个:

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

button->setMenu(menu);

enter image description here

QPushButton::setMenu上的

Documentation

答案 1 :(得分:0)

您必须实施自己的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 Doc中的QMenu::popup(..)

  

显示菜单,以便atAction操作位于指定的全局位置p。要将窗口小部件的本地坐标转换为全局坐标,请使用QWidget :: mapToGlobal()。