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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Потоки и функции  (Прочитано 3121 раз)
Witcher
Гость
« : Август 01, 2011, 17:09 »

Имем
Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "QListWidget"
#include "QSettings"
#include "QThread"
namespace Ui {
    class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void paintEvent(QPaintEvent*);

private:
    Ui::MainWindow *ui;

private slots:
    void функция1();
    void функция2();//
    void функция3();//
};
#endif // MAINWINDOW_H

Код:
void MainWindow::функция1(){
   ...............................

}

Как мне запустить данную функцию в отдельном потоке??
С потоками никогда не имел дело, обьясните на пальцах как это делать.
Заранее премного благодврен!
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Август 01, 2011, 18:37 »

Можно в целевом потоке вызвать слот присоединённый принудительно как Qt::DirectConnection.
Или банально вызвать функцию из того потока.

Но учитывайте 2 момента:
1) Изменять gui из другого потока нельзя.
2) Читать тоже далеко не всегда безопасно.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Август 01, 2011, 19:12 »

Как мне запустить данную функцию в отдельном потоке??
С потоками никогда не имел дело, обьясните на пальцах как это делать.
Простое объяснение "этого не надо делать". Потому что ф-ция (метод) MainWindow почти наверняка не будет "поткобезопасной" и систему завалит. Нужно тщательно продумать что запущенная нитка будет делать, какие данные ей передать и какие забрать (и как) - словом, проявить больше уважения к параллельному выполнению/программированию.
Записан
Witcher
Гость
« Ответ #3 : Август 01, 2011, 21:46 »

Ясно, это пичаль(

Просто у меня на форме допустим каждую секунду приходится отрисовывать область определенного размера, и вызывать обновление формы каждый раз сами понимаете не айс, хотел в поток(заодно и изучит), но видимо бредовая идея.

Может посоветуете как тогда отрисовывать элементы в квадрате на форме размером например 20/40 каждую секунду не трогая paintEvent??
в билдере таких проблем у меня не было, но на то он и билдер....
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #4 : Август 01, 2011, 22:17 »

Просто у меня на форме допустим каждую секунду приходится отрисовывать область определенного размера, и вызывать обновление формы каждый раз сами понимаете не айс, хотел в поток(заодно и изучит), но видимо бредовая идея.
Рендерим в потоке скажем в QPixmap, emit'им сигнал с этим QPixmap'ом как параметром. В гланом потоке к этому событию коннектим слот и в этом слоте выводим отредеренный участок (если область всегда одна и та же, то можно через QLabel::setPixmap.
Записан
Witcher
Гость
« Ответ #5 : Август 01, 2011, 23:10 »

Сделал вывожу в Qlabel, но получается почему не понятно что, в текущем лабле отражаются буквы с других лабл, сам лабл цифрит очень ужастно
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #6 : Август 01, 2011, 23:29 »

«Talk is cheap. Show me the code.»
Записан
Witcher
Гость
« Ответ #7 : Август 01, 2011, 23:40 »

Все переделал, премного благодарен. Нагрузку на 50% сняло. буду с потоками мутить может что получится)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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