6

私は Qt を使用して会社のリーダー テーブルを作成する学生プログラマーです。このリーダーは、エディターとコンバーターの両方です。.i ファイルを読み込み、テキスト ドキュメントのテーブル編集を可能にし、.scf ファイルを出力します。.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 を変更したダイアログのレイアウトに追加した方法が気に入らなかったことにも気付きました (これは 2 番目のエラーです)。ここでばかげたことをしているだけで、簡単に克服できることを本当に願っています。

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 に答える