2012-07-04 118 views
1

我有一個Windows XP機器上運行的Qt應用程序,我試圖最終禁用右鍵單擊滾動條時彈出的上下文菜單(與「向下滾動」和「向上翻頁」等)。如何禁用Qt中禁用QScrollbar上下文菜單(Windows XP)

我嘗試下面的東西,沒有工作:

ui->scrollArea->setContextMenuPolicy(Qt::NoContextMenu); 
ui->scrollAreaWidgetContents->setContextMenuPolicy(Qt::NoContextMenu);    
ui->scrollArea->horizontalScrollBar()->setContextMenuPolicy(Qt::NoContextMenu); 

ui->scrollArea->setContextMenuPolicy(Qt::PreventContextMenu); 
ui->scrollAreaWidgetContents->setContextMenuPolicy(Qt::PreventContextMenu);  
ui->scrollArea->horizontalScrollBar()->setContextMenuPolicy(Qt::PreventContextMenu); 
+0

你確定你想禁用水平(而不是垂直)滾動條上下文菜單嗎? 'horizo​​ntalScrollBar() - > setContextMenuPolicy(Qt :: NoContextMenu);'適合我。 – hank

+0

嗨hank,比你的評論 - 事實上,我試圖禁用他們的所有滾動條(水平的只是一個例子)。我剛剛發現你是正確的 - 它適用於所有'標準'滾動條 - 但我使用的是一個在滾動條(或在tableview的一側)與國旗'Qt :: ScrollBarAsNeeded'上創建的滾動條。這裏的滾動條似乎忽略了ContextMenuPolicy,即使我抓住他們明確設置它與給定的代碼.. – TWE

回答

0

我從來沒有發現它爲什麼沒有我的情況下果然奏效(似乎它與嵌套小部件和對象做)但我發現了一個解決方案,它是像大錘方法,但對我的作品:

foreach(QObject *widget, qApp->allWidgets()) 
{ 
    QScrollBar *scrollBar = dynamic_cast<QScrollBar*>(widget); 
    if(scrollBar) 
    { 
     scrollBar->setContextMenuPolicy(Qt::NoContextMenu); 
    } 
} 

這在整個應用程序在啓動時禁用一次(如果修改或其他物體)滾動條的上下文菜單。