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

标签 c++ qt qtextbrowser

我在 textBrowser_filename 中打印文件名。但是在 commenting 在 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

谢谢!

最佳答案

关于你的第二个问题,为什么要打印...。那是因为它们是当前目录中的文件。它们分别对应于当前目录和父目录。如果您想使用 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'));

关于c++ - 为什么我的qt程序卡住了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46593660/

相关文章:

c++ - 函数指针 + 映射 + 迭代器 + 类

c++ - qt中GUI同时更新和控制

c++ - 将两个点转换为矩形 (cv::Rect)

c++ - IplImage 上的半透明对象

c++ - 计算数组的非空元素

c++ - 构造 QFileInfo 对象会导致文件系统访问吗?

c++ - 如何使 QChar.unicode() 报告组合字符的 utf-16 表示形式?

c++ - 为什么 QIterator 对象对于放置在两个不同位置的同一个文件夹表现不同?

python - 如何将 html 文件加载/显示到我的 QTextBrowser 小部件中?