0

こんにちは、お時間をいただきありがとうございます。

QList でファイル名を読み取ります。これは私がやったことです:

QFileDialog dialog(this);
dialog.setFileMode(QFileDialog::ExistingFiles);
dialog.setViewMode(QFileDialog::Detail);
if(dialog.exec()) {
    files.append(dialog.selectedFiles());
}
foreach(QString file, files) {
    // add files to a table
}

QListファイルにすべてのファイルがあります。ここで、ユーザーにこのリストに情報を追加してもらいます。PHP (または JavaScript) では、次のようにします。

$fileinformation = array();
foreach($files AS $file) {
    array_push($fileinformation, array (
                                       'filename'   => $file,
                                       'doAction1'  => false,
                                       'doAction2'  => true,
                                       'parameter2' => array (
                                                              'value1' => $val1,
                                                              'value2' => $val2
                                                       )
                                       )
    )
}

そして次のステップでは、編集によってユーザーがデフォルトのオプションを編集できるようにします$fileinformation['parameter2']['value']。しかし、QTでこれを行うにはどうすればよいですか? QList や QMap のような特定の関数が qt にあることは知っていますが、どちらも多次元ではなく、この場合には柔軟性がありません。

私は何を取りこぼしたか?

4

1 に答える 1

1

あなたは何も見逃していません。静的に型付けされた言語では、通常、完全に異なる型のオブジェクトがすべて同じコンテナーに含まれることはありません。

すべてのパラメーターがコンパイル時に定義されていると仮定すると、それらのパラメーターを含むクラスまたは構造体を定義して、リストに格納できます。簡潔にするために、この例では生の構造体を使用しています。コンストラクターを使用してそのメンバーを明示的に初期化し、場合によってはそのデータを意味のあるクラスにラップすることをお勧めします。

struct FileInformation
{
   QString filename;
   bool doAction1;
   bool doAction2;

   struct ParameterStruct
   {
      QString value1; // I'm guessing it's QString, since you don't show what type it was.
      QString value2;
   } parameter2;
};

int main()
{
   QList<FileInformation> myList;
   FileInformation info;
   info.fileName = "filename.txt";
   info.doAction1 = false;
   info.doAction2 = true;
   info.parameter2.value1 = "someValue";
   info.parameter2.value2 = "someOtherValue";
   myList.append(info);

   //now to change stuff!
   myList[0].parameter2.value1 = "a new value";
}

上記の例に似た方法でこれを行うことは可能ですが(QVariantMapsをネストすることにより)、C ++の静的型付けではすべてのアクセスで手動でキャストする必要があるため、これは非常に醜いものになります。

于 2012-06-30T01:08:57.867 に答える