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