Я хочу переопределить метод contextmenuevent для QScrollbar
в Qt 5.6 с минимальными изменениями в функциональности. Это можно сделать, если я получаю указатель на контекстное меню QScrollBar
. Однако, похоже, нет способа получить исходное контекстное меню QScrollbar
. Другим вариантом может быть создание QMenu
и добавление действий, связанных с каждым элементом в новом меню. Например, я могу добавить элемент «Прокрутить здесь» и приложить действие, связанное с контекстным меню «Полоса прокрутки», если я знаю метод, который вызывается, когда я нажимаю «Прокрутить здесь» в исходном контекстном меню. Есть ли способ получить эти действия?Есть ли способ получить указатель на контекстное меню QScrollBar?
1
A
ответ
-1
Используйте triggerAction и setValue для вашего нового контекстного меню.
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()));
...
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);
Это не дает ответа на вопрос. –