我想在Qt 5.6中重新实现QScrollbar
的contextmenuevent方法,功能上的变化很小。如果我获得指向QScrollBar
上下文菜单的指针,则可以执行此操作。但是,似乎没有方法可以获取原始的QScrollbar
上下文菜单。另一个选项可以是创建QMenu
并添加与新菜单中的每个项目关联的操作。例如,我可以添加“Scroll Here”项,并附加与Scroll Bar上下文菜单相关联的操作,如果我知道在原始上下文菜单中单击“Scroll Here”时调用的方法。有没有办法获得这些行动?
答案 0 :(得分:0)
每次有上下文菜单事件时都会生成菜单。 source code将向您展示如何构建相同的菜单。它相当简短,非常简单:
QPointer<QMenu> menu = new QMenu(this);
QAction *actScrollHere = menu->addAction(tr("Scroll here"));
...
QAction *actionSelected = menu->exec(event->globalPos());
delete menu;
if (actionSelected == 0)
/* do nothing */ ;
else if (actionSelected == actScrollHere)
setValue(d_func()->pixelPosToRangeValue(horiz ? event->pos().x() : event->pos().y()));
...
答案 1 :(得分:0)
您可以使用CustomContextMenuPolicy:
QScrollBar *scroll = new QScrollBar;
scroll->setContextMenuPolicy(Qt::CustomContextMenu);
connect(scroll, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(populateContextMenu(QPoint)));
在插槽populateContextMenu()中:
QMenu* menu = new QMenu;
// Add actions
QAction* example = menu->addAction("Example");
// Connect the action clicked with the slot
connect(example, SIGNAL(triggered(bool)),.....);
// Finally, show the context menu, map to global to show the correct position
const QPoint pos = ui->listView->mapToGlobal(point);
menu->popup(pos);
答案 2 :(得分:-1)
使用triggerAction和setValue作为新的上下文菜单。