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."));
}
}
我開始將您的示例代碼放入一個最小的完整示例中。首先我注意到:文件對話框看起來像本地文件對話框(如果它不是本機的話)。有很多不同的彈出式菜單取決於我在哪裏點擊右鍵。恐怕他們不能被抑制(因爲源自Windows/Explorer的行爲)。 (我忘了提及我在Windows 10上談論/測試)。 – Scheff
是的,我使用下面的代碼來設置native,在這兩種情況下,菜單是彼此不同的,但都不能禁用。那麼是否有任何方法阻止右鍵單擊事件/信號到系統IN FILEDIALOG? filedialog.setOption(QFileDialog :: DontUseNativeDialog,true); filedialog.setOption(QFileDialog :: DontUseNativeDialog,false); –
如何創建自己的文件對話框? – m7913d