Не удается обновить текст Редактировать текст QT

#c #qt

#c #qt

Вопрос:

У меня проблема. Мой textEditBox , похоже, не обновляется при вызове моей Addtext функции.

Вот мой Addtext :

 void CTextBox::AddText(QString string, QString spriteString)  
{

    textBrowser->setText(string   spriteString);
    update();

}
  

Затем другой класс вызывает функцию, и она должна добавить текст в textbox , но этого не происходит.

Комментарии:

1. Что такое textBrowser? Я полагаю, что это QTextEdit *. Как вы его создаете; Через QDesigner или с помощью кода?

2. С помощью кода я изначально собирался создать QTestBrowser, но изменил его и забыл изменить имя переменной.

3. Я думаю, что вам нужно показать больше кода, чтобы разобраться в проблеме. update Не должно быть необходимости — изменение текста приведет к QTextEdit перерисовке. Вы уверены, что функция действительно вызывается? (Используйте qDebug() и убедитесь.)

4. Он определенно вызывается с помощью отладчика, он явно входит в метод.

Ответ №1:

Как вы вызываете CTextBox::addText()? update() только планирует paintEvent() на потом, когда программа вернется к циклу событий. Это означает, что

  1. на самом деле вам нужно иметь цикл событий, т.Е.. в какой-то момент вам нужно вызвать qApp->exec() ;

  2. вам нужно дать программе некоторое время на qApp->processEvents() (вставьте это после update() ), если вы хотите, чтобы какие-либо изменения выполнялись в рамках блокировки while() {...} или что-то в этом роде.

Редактировать: Если подумать, вам даже не нужно вызывать update() nor processEvents() , если ваша программа возвращается к циклу событий через некоторое время после AddText , так что, похоже, действительно проблема с циклом событий. Опубликуйте свой main.cpp не так ли?

Комментарии:

1. Я вызываю это каждый раз, когда необходимо добавить новый текст, например

2. addtext(созданный узел, nodename). Я попытался заменить printf своим собственным методом.

3. В принципе, я хочу сделать то же самое.

4. Отредактировал мой ответ. Проверьте свой main.cpp пожалуйста. У вас есть выполняемый QApplication запуск? Недостаточно просто создать его, а затем открыть окно и ожидать, что что-нибудь произойдет. (Не знаю, это то, что вы делаете, но похоже на это.)

5. Создание одноэлементного текстового поля? Почему??? Singleton — это шаблон проектирования, который означает, что вы можете создать объект максимум за один раз. Приложение может быть одноэлементным, класс ведения журнала может быть одноэлементным, но QTextBox не должен быть одноэлементным

Ответ №2:

Вот тривиальный пример того, что, похоже, вы пытаетесь сделать. Может быть, вы можете увидеть, чем отличается ваш дизайн?

Обратите внимание: никаких явных update() действий не требуется. Я думаю, что это отвлекающий маневр. Я думаю, что гораздо более вероятно, что (1) вы каким-то образом вызываете свой AddText метод с пустыми строками или (2) ваше реальное редактирование текста — это другая переменная, и вы каким-то образом создали две из них и обновляете ту, которая просто существует в памяти и никогда не добавлялась в макет. Возможно, код вашего FileLoaderQT поможет? (Вы можете отредактировать свой вопрос, а не публиковать в комментариях.)

 #include <QtGui>
int main(int argc, char **argv) {
  QApplication app(argc, argv);
  QMainWindow w;
  QTextEdit *edit = new QTextEdit;
  w.setCentralWidget(edit);
  edit->setText("Hello world!");
  w.show();
  edit->append("Hello world again!");
  return app.exec();
}