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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Визуализация переменной из функции в потоке  (Прочитано 3261 раз)
Astrologer
Гость
« : Май 03, 2010, 13:41 »

Привет всем. У меня есть вопросик, с которым я бы хотел чтобы вы мне помогли. Заранее большое спасибо.
У меня есть некая функция algorithm(QString name). Выполнение этой функции занимает довольно большой промежуток времени и поэтому я ее запускаю в отдельном потоке. Однако я бы хотел чтобы прогресс операции можно было наблюдать. Например, я хочу ввести внутри функции переменную которая будет меняться от 0 до 100, и ее передавать QProgressDialog. Теперь остался вопрос как это все связать между собой. Может быть есть другие способы? Очень надеюсь на вашу помощь. Здесь идет часто кода:
Код:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(this->ui->test_button, SIGNAL(clicked()), SLOT(call_algorithm()));
}

void MainWindow::call_algorithm()
{
    QFuture<void> future = QtConcurrent::run(algorithm, this->ui->jpg_name_edit->text());
}

void algorithm(QString image_name)
{
//some code goes here =)
}
Записан
garryHotDog
Гость
« Ответ #1 : Май 03, 2010, 14:24 »

все просто:
1. добавляешь сигнал в MainWindow.h:
Код
C++ (Qt)
signals:
   void signal_UpdateProgress(int AValue);
 

2. соединяем его с нашим прогресс баром:
Код
C++ (Qt)
connect(this,SIGNAL(updateProgress(int)),&ui.progressBar,SLOT(setValue(int)));
 

3. инициализируем прогресс бар перед использованием:
Код
C++ (Qt)
ui.progressBar->setRange ( 0, 100 );
 
4. вставляешь сигнал signal_UpdateProgress в свою функцию и все готово.
Код
C++ (Qt)
emit signal_UpdateProgress(NewValue);
 


Записан
Astrologer
Гость
« Ответ #2 : Май 03, 2010, 14:47 »

Спасибо большое, все просто и понятно. Улыбающийся Единственное - не должно ли быть так -

Код
C++ (Qt)
connect(this, SIGNAL(signal_UpdateProgress(int)), this->ui->progressBar, SLOT(setValue(int)));
 
Записан
garryHotDog
Гость
« Ответ #3 : Май 03, 2010, 15:43 »

Цитировать
Спасибо большое, все просто и понятно. Улыбающийся Единственное - не должно ли быть так -

зачем this->, можно ведь просто ui->!!
Записан
Astrologer
Гость
« Ответ #4 : Май 03, 2010, 16:21 »

Хорошо. Спасибо еще раз.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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