2017-04-06 43 views
0

我在我的Qt程序中使用QFileDialog,通過它,用戶不應該被允許修改或刪除選定的文件。因此,我不需要彈出文件對話框中的右鍵單擊菜單。無法禁用QFileDialog的ContextMenu

我嘗試了兩種方法來禁用它,如下所示,但失敗,右鍵菜單不會消失,任何人都可以幫助我禁用/防止/ set_invisible右鍵菜單?

//#define NOMENUCLASS 1 
#ifdef NOMENUCLASS 
class Q_WIDGETS_EXPORT QNoMenuFileDialog : public QFileDialog 
{ 
public: 
    QNoMenuFileDialog(); 
    ~QNoMenuFileDialog(); 
protected: 
    void ShowContextMenu(const QPoint& pos); 
}; 
void QNoMenuFileDialog::ShowContextMenu(const QPoint& pos) {} 
QNoMenuFileDialog::QNoMenuFileDialog(){} 
QNoMenuFileDialog::~QNoMenuFileDialog(){} 
#endif 
void MainWindow::on_pushButton_2_clicked() 
{ 
    QStringList mimeTypeFilters; 
    mimeTypeFilters << "image/jpeg" /*will show "JPEG image (*.jpeg *.jpg *.jpe)*/ 
       << "image/png" /*will show "PNG image (*.png)"*/ 
       << "application/octet-stream"; /*will show "All files (*)"*/ 
#ifdef NOMENUCLASS 
    /*1. try to disable the right click menu using a invalid function ShowContextMenu --failed */ 
    QNoMenuFileDialog dialog; 
    dialog.setMimeTypeFilters(mimeTypeFilters); 
    dialog.setContextMenuPolicy(Qt::NoContextMenu); 
#else 
    /*2. try to disable the right click menu using setContextMenuPolicy(Qt::PreventContextMenu) --failed */ 
    QFileDialog dialog; 
    dialog.setContextMenuPolicy(Qt::PreventContextMenu); 
#endif 
    if(dialog.exec() == QDialog::Accepted) { 
      QString path = dialog.selectedFiles()[0]; 
      QMessageBox::information(NULL, tr("Path"), tr("You selected ") + path); 
    } else { 
      QMessageBox::information(NULL, tr("Path"), tr("You didn't select any files.")); 
    } 
} 
+0

我開始將您的示例代碼放入一個最小的完整示例中。首先我注意到:文件對話框看起來像本地文件對話框(如果它不是本機的話)。有很多不同的彈出式菜單取決於我在哪裏點擊右鍵。恐怕他們不能被抑制(因爲源自Windows/Explorer的行爲)。 (我忘了提及我在Windows 10上談論/測試)。 – Scheff

+0

是的,我使用下面的代碼來設置native,在這兩種情況下,菜單是彼此不同的,但都不能禁用。那麼是否有任何方法阻止右鍵單擊事件/信號到系統IN FILEDIALOG? filedialog.setOption(QFileDialog :: DontUseNativeDialog,true); filedialog.setOption(QFileDialog :: DontUseNativeDialog,false); –

+0

如何創建自己的文件對話框? – m7913d

回答

0

我試過QFileDialog :: ReadOnly來避免這個問題。 dialog.setOption(QFileDialog::ReadOnly);