簡體   English   中英

修改QFileDialog :: getOpenFileName以獲得額外的下拉列表

[英]Modifying QFileDialog::getOpenFileName to have an additional drop down

我是一名學生程序員,使用Qt為我的公司建立一個讀者表。 這個讀者既是編輯又是轉換器。 它讀入.i文件允許對文本文檔進行表格編輯,然后輸出.scf文件,該文件本質上是一個分隔值文件,堆疊在用標題構建的圖例下。 我離題...基本上導入的文件格式很難掃描和讀入(大多數是不可能的)所以我想要修改打開的文件preBuilt QFileDialog以包含一個額外的下拉菜單,當選擇較舊的文件類型來聲明他們的模板標題。

當用戶選擇.i擴展文件(選項2文件類型)時,我想啟用一個額外的下拉菜單,以允許用戶選擇它是哪種類型的.i文件(模板選擇)。 這樣我就不必處理上帝知道了多少小時試圖找出一種方法來將每個不同類型的所有標題索引到表中。 目前我的importFile函數使用以下方法調用對話框:

QString fileLocation = QFileDialog::getOpenFileName(this,("Open File"), "", ("Simulation Configuration File(*.scf);;Input Files(*.prp *.sze *.i *.I *.tab *.inp *.tbl)")); //launches File Selector

我一直在引用QFileDialog文檔來嘗試找到我需要的解決方案但卻無濟於事。 感謝您閱讀我的帖子,並提前感謝您可以給予的任何方向。

更新於2012年3月16日; 首先,我要感謝Masci對此事的初步支持。 下面是我收到的連接語句以及我收到的錯誤。

//Declared data type
    QFileDialog openFile;
    QComboBox comboBoxTemplateSelector;
    connect(openFile, SIGNAL(currentChanged(const &QString)), this, SLOT(checkTemplateSelected()));
    openFile.layout()->addWidget(comboBoxTemplateSelector);

編譯錯誤

我也注意到它不喜歡我將QComboBox添加到修改后的對話框布局的方式(這是第二個錯誤)。 我真的希望我在這里做一些愚蠢的事情,這是一個很容易克服的任務。

響應tmpearce的評論,我的標題代碼;

#include <QWidget>
namespace Ui {
class ReaderTable;
}
class ReaderTable : public QWidget
{
    Q_OBJECT
public:
    explicit ReaderTable(QWidget *parent = 0);
    ~ReaderTable();
public slots:
    void checkTemplateSelected();
    void importFile();
    void saveFile();
private:
    Ui::ReaderTable *ui;
};

感謝您提前閱讀並感謝您對此挑戰的任何貢獻!

實例化QFileDialog(不要調用getOpenFileName靜態方法),訪問其布局並向其添加禁用的QComboBox。

// mydialog_ and cb_ could be private fields inside MyClass
mydialog_ = new QFileDialog;
cb_ = new QComboBox;
cb_->setEnabled(false);
connect(mydialog, SIGNAL(currentChanged(const QString&)), this, SLOT(checkFilter(const QString&)));
mydialog_->layout()->addWidget(cb_);

if (mydialog_->exec() == QDialog::Accepted) {
    QString selectedFile = mydialog_->selectedFiles()[0];
    QString cbSelection = cb_->currentText();
}

插槽將是這樣的:

void MyClass::checkFilter(const QString& filter) 
{
  cb_->setEnabled(filter == "what_you_want");
}

從對話框exec()返回,您可以檢索所選文件和cb_當前選擇。 請注意,您可以在對話框的底部添加比簡單的QComboBox更復雜的東西,照顧gui化妝品。

實際上我不太喜歡這種方法(但這就是你要求的:-)。 我會做一個像這樣的簡單對話:

在此輸入圖像描述

並且僅在所選文件符合您的條件時啟用組合。 “瀏覽”按鈕可以在QFileDialog中調用getOpenFileMethod靜態方法。

您可以通過此信號處理項目選擇:
void QFileDialog::fileSelected ( const QString & file )
然后它發生,調用所需類型的setFilter
對不起,如果我不明白你的任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM