разрушение контейнера QGlyphRuns завершается неудачно - PullRequest
1 голос
/ 21 марта 2012

Я пытаюсь перемещаться по набору глифов в виджете QTextEdit, но не могу преодолеть следующую проблему: после получения списка QGlyphRuns его невозможно разрушить.

Вот код для получения списка QGlyphRuns:

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();
}

Когда разрушаются глифы, я получаю сообщение об ошибке _BLOCK_TYPE_IS_VALID. Я пробовал несколько способов запустить приведенный выше код:

  • простой слот
  • слот обрабатывается в отдельном потоке (с использованием функции moveToThread и без нее)
  • как обработчик события (событие вызывается методом postEvent из QApplicaiton)

Но ни один из них не помог избавиться от исключения. Единственный случай, когда это не возникает, - это когда приведенный выше код вызывается из конструктора MainWindows (после вызова ui-> setupUI ()).

Я использую QT 4.8 некоммерческий с MSVC ++ 2010 express. Кто-нибудь знает, почему это происходит? И как это обойти?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 26 марта 2012

Я обнаружил, что проблема вызвана использованием "релизных" библиотек QT в "отладочной" версии проекта.После перехода на «отладочную» версию исключение пропало.

0 голосов
/ 21 марта 2012

Почему ваш код структурирован так:

do
{
//... 
}
while(block.isValid());

вместо

while(block.isValid())
{
//...
}

В первом случае код запускается по крайней мере один раз, потому что проверка правильности выполняется только после блока кода, поэтому я предполагаю, что вы получаете исключение в случае, если самый первый блок недействителен. Если вы измените его на последний формат, код будет пропущен, если первый блок недействителен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...