繁体   English   中英

在 QFileDialog 中禁用文件名框

[英]Disable file name box in QFileDialog

我使用 QFileDialog 打开浏览器。 这是我的代码

QString filePath = QFileDialog::getSaveFileName(this,
                                               "Export Xml", "PluginPythonQt",
                                                "Xml files (*.xml)");

执行时会显示如下对话框:

在此处输入图像描述

我想禁用图片中的“文件名:”框或阻止用户输入新名称。 我怎样才能做到这一点? 谢谢。

我相信您无法实现这一点-保存对话框除了选择保存位置之外,还涉及选择名称。 当然,您可能会忽略用户键入的内容,并在他单击OK时强行输入您的名字,但这只会使用户生气。

我认为更好的方法是使用QFileDialog::getExistingDirectory ,它将允许用户选择保存文件的位置,但不允许他选择文件名。 至少这是公平的。

https://forum.qt.io/topic/73973/qfiledialog-with-no-edit-box中回答了类似的问题。

通常,如果您深入研究小部件的源代码以查找元素的名称,则可以隐藏任何小部件中的任何元素,当您有名称时,您可以通过findChild<QWidget *>(elementName)找到相应的元素。 通常,如果您检查 QSomeWidget.h(Qt 是开源的。),您可以很容易地找到元素名称,因为它们通常被列为小部件成员,要隐藏两个标签、fileEdit、ComboBox 甚至按钮:您可以使用此代码:

QFileDialog fileDialog = new QFileDialog;

QWidget * fileNameEdit = fileDialog->findChild<QWidget *>("fileNameEdit");
Q_ASSERT(fileNameEdit);
fileNameEdit->setVisible(false);

QWidget * fileNameLabel = fileDialog->findChild<QWidget *>("fileNameLabel");
fileNameLabel->setVisible(false);

QWidget * fileTypeCombo = fileDialog->findChild<QWidget *>("fileTypeCombo");
Q_ASSERT(fileTypeCombo);
fileTypeCombo->setVisible(false);
    
QWidget * fileTypeLabel = fileDialog->findChild<QWidget *>("fileTypeLabel");
fileTypeLabel->setVisible(false);

QWidget * fileButtonBox = fileDialog->findChild<QWidget *>("buttonBox");
fileButtonBox->setVisible(false);

请注意,即使按钮被隐藏,在键盘上键入 Enter(或双击)也会触发“打开”按钮,如果您没有在 Accept 方法中执行任何操作,对话框可能会消失。 因此,如果您真的希望按钮也被隐藏,那么处理该按钮的 state 也是一个好主意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM