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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вывод в Gui из потока  (Прочитано 5805 раз)
qtист
Гость
« : Апрель 13, 2009, 16:47 »

Пытаюсь из потока вывести инфу в QTextEdit - вылетает со свистом,
где-то в библиотеках.

Код
C++ (Qt)
void myThread::run()
{  QString str;
 
   forever
   {
str=prut->_ReceiveFromServer(1); //получаю строку - всё нормально
if(!str.isEmpty())
prut->textPrintMonitor(str); //пытаюсь вывести
  }
}

textPrintMonitor(...) - функция работающая, не из потока всё нормально

Чё я не так делаю? Плачущий
Записан
spirit
Гость
« Ответ #1 : Апрель 13, 2009, 16:57 »

что такое prut?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #2 : Апрель 13, 2009, 17:08 »

что такое prut?

+1

И что происходит в textPrintMonitor? Покажи код
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Апрель 13, 2009, 17:10 »

Включаю либастрал. Походу prut - родитель потока. Нельзя из потока обращаться к гуи. Используй сигналы.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
qtист
Гость
« Ответ #4 : Апрель 13, 2009, 17:13 »

Prut - головной модуль.

Код
C++ (Qt)
class Prut;
 
class myThread : public QThread
{
Q_OBJECT
public:
myThread(QObject *parent);
~myThread();
 
   Prut* prut;
 
protected:
void run();
private:
};


создаю:

Код
C++ (Qt)
void Prut::on_pushButton_4_clicked()
{
 
 thread=new myThread(this);
 thread->prut=this;
   m_thread->start();
}
Записан
qtист
Гость
« Ответ #5 : Апрель 13, 2009, 17:13 »

Включаю либастрал. Походу prut - родитель потока. Нельзя из потока обращаться к гуи. Используй сигналы.

точно

Используй сигналы.

Опа  Непонимающий
Записан
spirit
Гость
« Ответ #6 : Апрель 13, 2009, 17:16 »

ууу, не зачет.
так делать нельзя. делай как говорит panter_dsd.
считал строку, шли сигнал гую, в гуе лови сигнал потока и вставляй в текстЭдит.
Записан
qtист
Гость
« Ответ #7 : Апрель 13, 2009, 17:18 »

ууу, не зачет.
так делать нельзя. делай как говорит panter_dsd.
считал строку, шли сигнал гую, в гуе лови сигнал потока и вставляй в текстЭдит.

эээ...хорошо бы материально,то бишь кодиком  Строит глазки
Записан
spirit
Гость
« Ответ #8 : Апрель 13, 2009, 17:21 »

типа так
Код
void myThread::run()
{  QString str;
 
   forever
   {
str=prut->_ReceiveFromServer(1); //получаю строку - всё нормально
if(!str.isEmpty())
emit dataChanged(str);
  }
}
 
void Prut::on_pushButton_4_clicked()
{
 
 m_thread=new myThread(this);
   m_thread->start();
 connect(m_thread, SIGNAL(dataChanged(const QString &)), SLOT(updateText(const QString &)), Qt::QueuedConnection);//последний параметр можно и не задавать, т.к. поумолчанию стоит Qt::AutoConnection и кьюти сама решает какой тип соединения юзать
}
 
void Prut::updateText(const QString &str)
{
   //пихаем в QTextEdit
}
 
Записан
qtист
Гость
« Ответ #9 : Апрель 13, 2009, 17:24 »

Понял! Завтра прям с утра и попробую - даж кофе пить не буду. Показает язык
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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