6

我是一名学生程序员,使用 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;
};

感谢您阅读并提前感谢您对此挑战的任何贡献!

4

2 回答 2

6

实例化一个 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 静态方法。

于 2012-03-14T18:23:58.633 回答
0

您可以通过此信号处理项目选择:
void QFileDialog::fileSelected ( const QString & file )
然后它发生,setFilter使用您想要的类型调用。
对不起,如果我不明白你的任务。

于 2012-03-14T18:18:31.233 回答