为啥我的qt程序卡住了?
Posted
技术标签:
【中文标题】为啥我的qt程序卡住了?【英文标题】:why my qt program get stuck?为什么我的qt程序卡住了? 【发布时间】:2017-10-05 19:45:41 【问题描述】:我正在打印 textBrowser_filename
中的文件名。但是在 commenting 中,在 textBrowser 中打印文件名的 sn-p 运行平稳。那么 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 filter doc.qt.io/qt-5/qdiriterator.html#QDirIterator-2 不幸的是,在应用 QDir::NoDotAndDotDot 过滤器后没有打印任何内容。:( 我像QDirIterator it(dir, QDir::NoDotAndDotDot , QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
一样添加了它//根据定义非常正确
使用QDirIterator it(dir, QDir::NoDotAndDotDot | QDir::AllEntries , QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
解决
【参考方案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'));
【讨论】:
这也是我的建议。我怀疑每次添加文本时,整个文本浏览器都必须重新计算其内部状态。但是你看不到任何事情发生,因为没有调用主事件循环,所以直到最后才显示 UI 更新。 “顺利”是指没有任何控制台错误,它运行良好。 但是如果评论被删除而不是卡住并且控制台错误说程序以退出状态 1 结束。如果我的话误导了你,它不是“慢” 好吧,您在原始帖子中从未提到过!我建议您使用调试器逐步完成,或者在向浏览器添加新行时打印出qDebug()
消息。您确定错误是因为注释掉的代码而发生的吗?
不,我只是猜到了,因为当我评论那部分时,它顺利工作了:)以上是关于为啥我的qt程序卡住了?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 64 位 5s iPhone 上安装时应用程序会卡住
为啥在部署我的项目后卡住/空白页面?反应路由器 Dom |参数