crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Потоки и Qwt!
posi4
  опции профиля:
сообщение 13.1.2010, 12:50
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 52
Регистрация: 24.4.2009
Пользователь №: 707

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




Репутация:   0  


Есть главная форма, на ней хочу рисовать динамически обновляемые графики Qwt в отдельном потоке!
Рисование графиков взял из примера qwt - класс DataPlot.
Логику понимаю вроде, но похоже запутался =\ дальше код:

class PlotThread: public QThread
{
        DataPlot* myplot;

        protected:
                virtual void run()
                {
                    myplot->setObjectName(QString::fromUtf8("PlotUp"));
                    myplot->setGeometry(QRect(10, 130, 800, 400));
                    .
                    .
                    .
                }

        public:
                PlotThread(DataPlot* plot, QObject * parent = 0):
                        QThread(parent)
                {
                    myplot = plot;
                }
};

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

MyGUI::MyGUI(SecondPart* secpart,QWidget *parent)
        : QWidget(parent), ui(new Ui::MyGUI)
{
    ui->setupUi(this);
    ui->groupBox_InParams->setShown(false);
    this->secpart = secpart;
  
    DataPlot* plotUp = new DataPlot(this)
    PlotThread* plot = new PlotThread(plotUp);
    plot->start();
.
.
.
.
}


Ошибок при компиляции не выдаёт, но после запуска программы сразу завершается!
То ли я не правильно объявляю, то ли не правильно создаю - запутался! Помогите!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 13.1.2010, 13:01
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


Если DataPlot наседуется от QwtPlot, то это GUI-объект (т.к. QwtPlot наследний QFrame).
Работать с GUI-объектом можно только в главном (GUI) потоке!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
azure
  опции профиля:
сообщение 13.1.2010, 13:26
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 60
Регистрация: 24.12.2009
Пользователь №: 1332

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




Репутация:   0  


как уже правильно подсказали, весь гуй - это отдельный поток. Увы!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
posi4
  опции профиля:
сообщение 13.1.2010, 13:45
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 52
Регистрация: 24.4.2009
Пользователь №: 707

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




Репутация:   0  


Цитата
Если DataPlot наседуется от QwtPlot, то это GUI-объект (т.к. QwtPlot наследний QFrame).
Работать с GUI-объектом можно только в главном (GUI) потоке!


Цитата(azure @ 13.1.2010, 13:26) *
как уже правильно подсказали, весь гуй - это отдельный поток. Увы!


Т.е. я так понимаю сделать тут ничего нельзя. :unsure:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 13.1.2010, 14:03
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(posi4 @ 13.1.2010, 13:45) *
Т.е. я так понимаю сделать тут ничего нельзя. :unsure:

Все, что не связано с GUI постараться выделить и перенести в отдельный поток. Только так, к сожалению!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
posi4
  опции профиля:
сообщение 13.1.2010, 14:35
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 52
Регистрация: 24.4.2009
Пользователь №: 707

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




Репутация:   0  




Цитата
Все, что не связано с GUI постараться выделить и перенести в отдельный поток. Только так, к сожалению!


да, придется так. спасибо всем, что подтвердили мои сомнения.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.1.2010, 16:15
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(posi4 @ 13.1.2010, 17:35) *
Т.е. я так понимаю сделать тут ничего нельзя.
готовь данные в отдельном потоке и посылай сигнал. В главном потоке путь ГУЙ ловит их и читает данные.
Я передавал из доп потока doble и doble (x и y, соответственно) в главный с помощью сигнала, эти данные сразу же рисовались. Т.е. хотел сделать что-то вроде осцилографа.

Но на практике оказалось медленно. Пока думаю, что нужно передавать пачку данных в виде QByteArray. Т.к. сырые данные опасно передавать из потока в поток, без какой либо защиты.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 21.9.2020, 12:03