2016-06-24 9 views
1

Я хочу переопределить метод contextmenuevent для QScrollbar в Qt 5.6 с минимальными изменениями в функциональности. Это можно сделать, если я получаю указатель на контекстное меню QScrollBar. Однако, похоже, нет способа получить исходное контекстное меню QScrollbar. Другим вариантом может быть создание QMenu и добавление действий, связанных с каждым элементом в новом меню. Например, я могу добавить элемент «Прокрутить здесь» и приложить действие, связанное с контекстным меню «Полоса прокрутки», если я знаю метод, который вызывается, когда я нажимаю «Прокрутить здесь» в исходном контекстном меню. Есть ли способ получить эти действия?Есть ли способ получить указатель на контекстное меню QScrollBar?

ответ

-1

Используйте triggerAction и setValue для вашего нового контекстного меню.

+1

Это не дает ответа на вопрос. –

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);