2016-06-24 76 views
1

我想在Qt 5.6中重新實現QScrollbar的contextmenuevent方法,但功能變化很小。如果我獲得指向QScrollBar上下文菜單的指針,就可以完成此操作。但是,似乎沒有辦法獲得原始QScrollbar上下文菜單。另一個選項可以是創建一個QMenu並在新菜單中添加與每個項目關聯的操作。例如,如果我知道在原始上下文菜單中單擊「滾動到此處」時調用的方法,則可以添加「滾動到此處」項目,並附加與滾動條上下文菜單關聯的操作。有沒有辦法獲得這些行動?有沒有辦法獲得指向QScrollBar上下文菜單的指針?

回答

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); 
相關問題