Visual c++ 销毁QX的容器失败
我试图在QTextEdit小部件中浏览一组glyph,但无法克服以下问题:检索到Qglyph运行列表后,无法对其进行分解 以下是获取QGlyph运行列表的代码:Visual c++ 销毁QX的容器失败,visual-c++,qt4,Visual C++,Qt4,我试图在QTextEdit小部件中浏览一组glyph,但无法克服以下问题:检索到Qglyph运行列表后,无法对其进行分解 以下是获取QGlyph运行列表的代码: QTextDocument* doc = ui->textEdit->document(); QTextBlock block = doc->begin(); while(block.isValid()) { QTextLayout* tl = block.layout(); { QLi
QTextDocument* doc = ui->textEdit->document();
QTextBlock block = doc->begin();
while(block.isValid())
{
QTextLayout* tl = block.layout();
{
QList<QGlyphRun> glyphs = tl->glyphRuns();
// the exception raises here, upon exiting the block
}
block = block.next();
}
QTextDocument*doc=ui->textEdit->document();
QTextBlock block=doc->begin();
while(block.isValid())
{
QTextLayout*tl=block.layout();
{
QList glyphs=tl->glyphrun();
//退出块时,会在此处引发异常
}
block=block.next();
}
当字形被破坏时,我得到_BLOCK_TYPE_is_VALID断言失败。我一直在尝试几种方法来启动上面的代码:
- 简单槽
- 在单独线程中处理的插槽(使用和不使用moveToThread函数)
- 作为事件处理程序(该事件由QApplication的postEvent方法触发)
提前感谢。为什么您的代码的结构是这样的:
do
{
//...
}
while(block.isValid());
而不是
while(block.isValid())
{
//...
}
在前一种情况下,代码至少运行一次,因为只有在代码块之后才检查有效性,所以我猜您在第一个块无效的情况下会得到异常。如果将其更改为后一种格式,那么如果第一个块无效,代码将被跳过。我发现问题是由于在项目的“调试”版本中使用了“发布”QT库造成的。切换到“调试”版本后,异常消失 你好,特卡姆,是的,谢谢你给我指路。出于某种原因,我假设必须始终至少有一个有效块(因为当textedit的上下文更改时调用此函数)。但这是不正确的,因为删除内容也是一种改变。我已经更正了代码,但是这个bug似乎与原始问题无关,因为异常仍然出现。再次感谢。