0

にファイル名を印刷していますtextBrowser_filename。ただし、ファイル名を textBrowser に出力するスニペットにコメントすると、スムーズに実行されます。QtcreatorのtextBrowser内に印刷/保存できるテキストの上限はありますか? 以下は、コメントを削除するとスムーズに実行されるコードですが、そうではありません。

void MainWindow::on_pushButton_browse_clicked()
{
    ui->textBrowser_filename->setLineWrapMode(QTextEdit::NoWrap);
    ui->textBrowser_filename->setText("");
    QString dir= QFileDialog::getExistingDirectory(this, tr("Open Directory"),
                                                   "/home",
                                                   QFileDialog::ShowDirsOnly
                                                   | QFileDialog::DontResolveSymlinks);
    ui->lineEdit_dir->setText(dir);
    QDirIterator it(dir, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
    /*
    while(it.hasNext())
    {
        QString path=it.fileName();
        ui->textBrowser_filename->append(path);
        it.next();
    }
    */
}

別の問題、つまり、ファイル名にも次のように出力されるのはなぜですか(コメントされています)?

sample.txt
.          //why this is printed
helloWorld.png
..         //why this is printed

ありがとう!

4

1 に答える 1

1

2 番目の質問については、なぜ...が印刷されています。これは、現在のディレクトリ内のファイルであるためです。それぞれ、現在のディレクトリと親に対応します。QDir::NoDotAndDotDotを使用したい場合は、それらを無視できますQDir::setFilter()。ただし、それらは存在し、QDirIterator特に指定しない限り、それらを反復処理します。

主な質問については、なぜQTextBrowser「スムーズに」実行されないのですか。私はあなたが何を意味するのか正確にはわかりません。遅いですか?それはまったく機能しますか?ディレクトリにはいくつのファイルがありますか?

単に遅い場合は、すべてのファイル名文字列を 1 つに結合してから、結合されたQTextBrowser::append()文字列で呼び出すことができます。例えば:

dir.setFilter(QDir::NoDotAndDotDot); // ignore . and ..
QDirIterator it(dir, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
QStringList files;
while (it.hasNext()) {
    files << it.fileName();
    it = it.next();
}
ui->textBrowser_filename.append(files.join('\n'));
于 2017-10-05T20:02:48.153 に答える