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.
答案 0 :(得分:1)
在" hover"上显示弹出菜单事件似乎违反了用户体验,因为用户希望在单击按钮时看到弹出窗口。这称为菜单按钮。如果您确实想使用 hover 事件,则可以继承QPushButton
类并使用其各自的事件。但是,如果您想使用菜单按钮,可以试试这个:
QMenu *menu = new QMenu();
QAction *testAction = new QAction("test menu item", this);
menu->addAction(testAction);
button->setMenu(menu);
QPushButton::setMenu
上的
答案 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()。