簡體   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