Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: qtист от Апрель 13, 2009, 16:47



Название: Вывод в Gui из потока
Отправлено: 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(...) - функция работающая, не из потока всё нормально

Чё я не так делаю? :'(


Название: Re: Вывод в Gui из потока
Отправлено: spirit от Апрель 13, 2009, 16:57
что такое prut?


Название: Re: Вывод в Gui из потока
Отправлено: pastor от Апрель 13, 2009, 17:08
что такое prut?

+1

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


Название: Re: Вывод в Gui из потока
Отправлено: Пантер от Апрель 13, 2009, 17:10
Включаю либастрал. Походу prut - родитель потока. Нельзя из потока обращаться к гуи. Используй сигналы.


Название: Re: Вывод в Gui из потока
Отправлено: qtист от Апрель 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();
}


Название: Re: Вывод в Gui из потока
Отправлено: qtист от Апрель 13, 2009, 17:13
Включаю либастрал. Походу prut - родитель потока. Нельзя из потока обращаться к гуи. Используй сигналы.

точно

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

Опа  ???


Название: Re: Вывод в Gui из потока
Отправлено: spirit от Апрель 13, 2009, 17:16
ууу, не зачет.
так делать нельзя. делай как говорит panter_dsd.
считал строку, шли сигнал гую, в гуе лови сигнал потока и вставляй в текстЭдит.


Название: Re: Вывод в Gui из потока
Отправлено: qtист от Апрель 13, 2009, 17:18
ууу, не зачет.
так делать нельзя. делай как говорит panter_dsd.
считал строку, шли сигнал гую, в гуе лови сигнал потока и вставляй в текстЭдит.

эээ...хорошо бы материально,то бишь кодиком  ::)


Название: Re: Вывод в Gui из потока
Отправлено: spirit от Апрель 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
}
 


Название: Re: Вывод в Gui из потока
Отправлено: qtист от Апрель 13, 2009, 17:24
Понял! Завтра прям с утра и попробую - даж кофе пить не буду. :P