有没有办法获取指向QScrollBar上下文菜单的指针?

时间:2016-06-24 14:21:03

标签: qt qt5 qscrollarea

我想在Qt 5.6中重新实现QScrollbar的contextmenuevent方法,功能上的变化很小。如果我获得指向QScrollBar上下文菜单的指针,则可以执行此操作。但是,似乎没有方法可以获取原始的QScrollbar上下文菜单。另一个选项可以是创建QMenu并添加与新菜单中的每个项目关联的操作。例如,我可以添加“Scroll Here”项,并附加与Scroll Bar上下文菜单相关联的操作,如果我知道在原始上下文菜单中单击“Scroll Here”时调用的方法。有没有办法获得这些行动?

3 个答案:

答案 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)

使用triggerActionsetValue作为新的上下文菜单。