2

私は大学の課題の 1 つで Qt で html エディターを開発中ですが、いくつかの変数の命名に関して問題があります。

問題はこれです:

ユーザーが「プロジェクト」をロードすることを決定すると、プログラムはフォルダーを反復処理し、そこにある .html ファイルの数を見つけて、それらを表示するためのタブを作成します。

私は顧客コンプリータと構文の強調表示などを備えたカスタム QTextEdit を持っています。現在私が抱えている問題は、必要な数に応じてそれらを作成する方法です。

ファイル名の QStringList を作成します。

QStringList m_files;
            m_files = aDialog.m_loadDirectory->entryList(QStringList("*.html"),QDir::Files|QDir::NoSymLinks);

次に、リストのそれぞれを繰り返し処理します。

for(int i=0; i<m_files.count();i++)
{

}

それぞれについて、新しいカスタム QtextEdit を作成する必要があります

TextEdit *name = new TextEdit;

次に、タブに追加します

tabs->addTab(name,"someTitle");

しかし、各 TextEdit はタブごとに異なる必要があるため (これは正しいと思います)、それぞれに異なる変数名が必要です。

TextEdit オブジェクトのリスト/配列を作成することを考えましたが、使用する必要がある数がわからないため、簡単に多すぎる (メモリの浪費) か、不十分になる可能性があります..

これを回避する方法についてのアイデアはありますか?

一つの考え..

ループの前に TextEdit オブジェクトを作成することは可能ですか?

次に、ループ内でそのオブジェクトのコピーを作成し、コピーしたオブジェクトをタブに追加しますか? (まだ変数の命名の問題...)

ありがとう

4

2 に答える 2

4

ただし、各 TextEdit はタブごとに異なる必要があるため (これは正しいと思います)

TextEditはい、各タブで異なるものが必要です。

それぞれに異なる変数名が必要です。

いいえ、それぞれに異なる変数名は必要ありません。さまざまなオブジェクトが必要ですが、変数名はそれとはあまり関係がありません。

シンプルな:

for (...) {
   TextEdit *te = new TextEdit(...);
   // set up that text edit in whatever way you need
   tabs->addWidget(te, "foo");
}

あなたが望むことを正確に行います。変数名teはまったく関係ありません (デバッグ シンボル以外の実行可能ファイルには表示されません)。ループのたびに、別のTextEditインスタンスで作業することになります。

実行時にその TextEdit を名前で参照する必要がある場合は、QMapたとえば、すべてのウィジェットをコレクションに保持できます。

 QMap<QString, QWidget*> all_editors;
 ...

 for (...) {
    TextEdit *te = ...;
    all_editors[filename] = te;
    ...
 }
于 2012-12-18T10:34:07.207 に答える
1

唯一の実行可能な解決策をすぐに破棄しました: テキスト編集をコレクションに入れます。texteditnewで作成する必要があるため、コレクション自体がスペースを浪費することはありません。

QPair<QTabWidget*, QTextEdit*>最も単純なケースには a を使用できます。より複雑なケースでは、カスタム ウィジェットを作成し、それらのリストを作成します。

をコピーするのQObjectは本当に悪い考えです。コピーコンストラクターはプライベートだと思うので、それを行うことさえできません

于 2012-12-18T10:27:57.660 に答える