Russian Qt Forum
Октябрь 04, 2024, 14:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не могу вывести текст в QPlainTextEdit (QTextEdit)  (Прочитано 5318 раз)
chital
Гость
« : Сентябрь 25, 2012, 14:50 »

Создаю QPlainTextEdit динамически в одном методе, в другом методе пытаюсь задать текст. Прграмма виснет на
QPlainTextEdir::setPlainText(QString);
Cоздание:
Код:
      QPlainTextEdit *vNewText = new QPlainTextEdit();
      vNewText->setObjectName(aInfo.name);
      connect(vNewText,SIGNAL(textChanged()),this,SLOT(endEditing()));
      aInfo.widget = vNewText;
      // задать режим расширения
      QSizePolicy vPol = vNewText->sizePolicy();
      vPol.setVerticalStretch(uchar(aInfo.countLine));
      vNewText->setSizePolicy(vPol);
Вставка текста:
Код:
          QPlainTextEdit *vMemo = dynamic_cast<QPlainTextEdit*>(vInfo.widget);
          if (vMemo)
            {
              vMemo->setPlainText(aValue.toString());
            }
Настройки проекта
Код:
QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = McEDO
TEMPLATE = app
Записан
mutineer
Гость
« Ответ #1 : Сентябрь 25, 2012, 14:51 »

Вставка текста происходит не в endEditing(), случаем?
Записан
chital
Гость
« Ответ #2 : Сентябрь 25, 2012, 15:11 »

Нашел ошибку. У меня класс widget был сделан потокобезопасным, чтобы в него можно было отправлять сигналы из других потоков. На все вызовы методов и слотов повесил мьютекс. В результате setPlainText вызывает сигнал endEditing.
Так как поток widget-ов один (главный), а сигналы от дочерних widget-ов подключены синхронно, происходит блокировка мьютекса.
Для решения данной проблемы необходимо подключать сигналы ассинхронно с помощью очереди:
Код:
      connect(vNewText,SIGNAL(textChanged()),this,SLOT(endEditing()),Qt::QueuedConnection);

проблема решена.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.138 секунд. Запросов: 20.