为什么我的qt程序卡住了?

时间:2017-10-05 19:45:41

标签: c++ qt qtextbrowser

我在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

谢谢!

1 个答案:

答案 0 :(得分:1)

关于您的第二个问题,为什么要打印...。那是因为它们是当前目录中的文件。它们分别对应于当前目录和父目录。如果您想使用QDir::NoDotAndDotDot使用QDir::setFilter(),则可以忽略它们。但是它们存在并且QDirIterator将迭代它们,除非您另有指定。

至于你的主要问题,为什么QTextBrowser没有“顺利”运行。我不知道你的意思。它慢吗?它有用吗?目录中有多少个文件?

如果速度很慢,您可以尝试将所有文​​件名字符串连接到一个文件串中,然后只使用连接的字符串调用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'));