我是一名学生程序员,使用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 Documentation来尝试找到我需要的解决方案,但却无济于事。感谢您阅读我的帖子,并提前感谢您可以给予的任何方向。
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;
};
感谢您提前阅读并感谢您对此挑战的任何贡献!
答案 0 :(得分: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静态方法。
答案 1 :(得分:0)
您可以通过此信号处理项目选择:
void QFileDialog::fileSelected ( const QString & file )
然后它发生,用您想要的类型调用setFilter
对不起,如果我不理解你的任务。