0

Qtを使用していますが、サポートが必要です

  1. Qtで変数をグローバルに宣言しQStringListて、任意の関数で変数にアクセスできるようにするにはどうすればよいですか?

  2. すべてのものをQStringList(から取得したファイルパスが含まれていますQFileDialog)からlineEdit?に出力する方法

私は試した:

ui->lineEdit->setText(filename);

しかし、それは私にエラーエラーを与えました:要求さQStringれた非スカラータイプQStringListに。例をいくつか教えてください。

4

2 に答える 2

2

QtでQStringList変数をグローバルに宣言して、任意の関数でアクセスできるようにする方法

これは問題ではありませんQtが、一般的なC ++のものです(最近ではグローバル変数が嫌われています。より受け入れられる同等のものはシングルトンです。SOで多くの例を検索してください)。それでも、これを行う1つの方法は、QStringListをインスタンス化するクラスの静的メンバーとして作成するQFileDialogことです。同じクラスは、とにかくダイアログからそれを取得したクラスになり、静的に保存(および返す)することで、効果的にグローバルにします。 :

class A
{
public:
    void openFileDialog() { // Open the dialog, and store the results in list_. }
    static const QStringList& getFileList() { return list_; }
private:
    static list_;
}

// Just call by:
QStringList list = A::getFileList();

QStringList内のすべてのものを印刷する方法(QFileDialogから取得したファイルパスが含まれています)

はい、QStringListには1つの文字列しか含まれていません

QStringList文字列が1つしかない場合は、次を使用してください。

ui->lineEdit->setText(list_[0]);

QStringListaはから派生しているので、他の要素と同じようQVector< QString >に個々のにアクセスできることを忘れないでください。QString

最初の質問を拡張するために、文字列のリストを1つのリストに組み合わせる方法は無数にあります。しかし、非常に一般的な(そして簡単な)方法QStringListは、以下を使用することjoin()です。

QStringList list; list << "This" << "is" << "a" << "list.";
list.join( " " ); // "This is a list. "

私は本当にドキュメントを使用することをお勧めします、Qtは素晴らしいです。

于 2012-08-02T16:48:28.163 に答える
1

グローバル変数の使用を再検討する必要があります。通常は、アクセスが必要な関数への参照を渡す方が適切ですが、必要な場合は、これがその方法です。ソースファイルの1つに通常どおり定義を入れます

QStringList foo;

そして、このように使用したいすべてのファイルにインクルードするヘッダーファイルにextern宣言を入れます

extern QStringList foo;

文字列のリストを行編集に渡したいというのも見当違いのようです。期待どおりに文字列を渡す方がよいでしょうが、どうしてもリストを渡す必要がある場合は、QLineEditをサブクラス化して、文字列リストを取得し、そのリストから文字列を取得するメソッドを指定する必要があります。 QLineEdit::setText。

于 2012-08-02T16:47:24.507 に答える