crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> QThread&QProcess
Azazello
  опции профиля:
сообщение 1.5.2010, 23:41
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 17.4.2010
Пользователь №: 1635

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем привет
Подскажите пожалуйста, что не так в коде ниже, и как можно сделать вывод процесса, запущенного в отдельном потоке в textEdit (как я понял, надо сначала передавать данные в основной поток)
Задача - запуск из GUI приложения процесса, в отдельном потоке и вывод полученной, в результате его выполнения, информации в textEdit.

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow)
{
        ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_pushButton_clicked()
{
    ServerThread th;
    th.start();
}


mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui/QMainWindow>
#include <QProcess>
#include <QString>
#include "thread.h"

namespace Ui
{
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

private slots:
    void on_pushButton_clicked();
};

#endif // MAINWINDOW_H


thread.cpp
#include "thread.h"
#include "mainwindow.h"
#include <QProcess>
#include <QTextCodec>
#include <QDebug>

void ServerThread::run()
{
    process = new QProcess(this);
    process->setProcessChannelMode(QProcess::MergedChannels);
    connect(process, SIGNAL(readyReadStandardOutput()), this, SLOT(output()));
    process->start("uname");
    exec();
}
void ServerThread::output()
{
    QByteArray bytes = process->readAllStandardOutput();     //как передать вывод из созданного потока в основной?
}


thread.h
#ifndef THREAD_H
#define THREAD_H
#include <QThread>

class QProcess;

class ServerThread : public QThread
{
    Q_OBJECT

public:
     void run();

public slots:
     void output();

signals:

private:
    QProcess *process;
    
};

#endif // THREAD_H


На данный момент при попытке компиляции, программа вылетает. Если трассировать вручную, то отладчик пишет:
QObject: Cannot create children for a parent that is in a different thread.
(Parent is ServerThread(0xbfffd8c4), parent's thread is QThread(0x804f818), current thread is ServerThread(0xbfffd8c4)
QThread: Destroyed while thread is still running
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- Azazello   QThread&QProcess   1.5.2010, 23:41
- - Litkevich Yuriy   Цитата(Azazello @ 2.5.2010, 3:41) Cannot ...   2.5.2010, 1:00
- - Azazello   Цитата(Litkevich Yuriy @ 2.5.2010, 2:00) ...   2.5.2010, 1:11
- - Litkevich Yuriy   Цитата(Azazello @ 2.5.2010, 5:11) Перевес...   2.5.2010, 12:13
- - Azazello   А, все, дошло ) Спасибо!   2.5.2010, 13:29
- - Azazello   Пытаюсь сделать вывод из дочернего потока в textEd...   2.5.2010, 16:00
- - Litkevich Yuriy   Цитата(Azazello @ 2.5.2010, 20:00) privat...   2.5.2010, 17:49
- - Azazello   Цитата(Litkevich Yuriy @ 2.5.2010, 18:49)...   2.5.2010, 18:03
- - igor_bogomolov   На сколько я понимаю, setOutput(QString) будет выз...   2.5.2010, 19:36
- - Litkevich Yuriy   Цитата(igor_bogomolov @ 2.5.2010, 23:36) ...   2.5.2010, 19:40
- - igor_bogomolov   Цитата(Litkevich Yuriy @ 2.5.2010, 20:40)...   2.5.2010, 19:49
- - Azazello   igor_bogomolov, Litkevich Yuriy, большое спасибо з...   2.5.2010, 20:16
- - igor_bogomolov   Блин, слепой я. Ты же ServerThread на стеке создаё...   2.5.2010, 20:31
- - Azazello   Действительно, поставив создание потока на обработ...   2.5.2010, 21:06
- - igor_bogomolov   Держи тестовый пример. Он правда для Windows, поэт...   2.5.2010, 21:27
- - Azazello   Цитата(igor_bogomolov @ 2.5.2010, 22:27) ...   2.5.2010, 21:56


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 24.11.2024, 10:48