crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Визуализация переменной из функции в потоке
Fandorin
  опции профиля:
сообщение 3.5.2010, 11:18
Сообщение #1


Студент
*

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

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




Репутация:   0  


Привет всем. У меня есть вопросик, с которым я бы хотел чтобы вы мне помогли. Заранее большое спасибо.
У меня есть некая функция algorithm(QString name). Выполнение этой функции занимает довольно большой промежуток времени и поэтому я ее запускаю в отдельном потоке. Однако я бы хотел чтобы прогресс операции можно было наблюдать. Например, я хочу ввести внутри функции переменную которая будет меняться от 0 до 100, и ее передавать QProgressDialog. Теперь остался вопрос как это все связать между собой. :rolleyes: Очень надеюсь на вашу помощь. Здесь идет часто кода:

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 =)
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 3.5.2010, 12:09
Сообщение #2


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

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

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




Репутация:   29  


Взгляни на QFutureWatcher и QtConcurrent Progress Dialog Example. Там найдёшь все что тебе надо :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Fandorin
  опции профиля:
сообщение 3.5.2010, 13:27
Сообщение #3


Студент
*

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

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




Репутация:   0  


Спасибо, но там несколько по другому. И я не могу понять как сделать именно в моем случае.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Fandorin
  опции профиля:
сообщение 3.5.2010, 16:28
Сообщение #4


Студент
*

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

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




Репутация:   0  


Решено.

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

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

3. инициализируем прогресс бар перед использованием:
ui.progressBar->setRange ( 0, 100 );

4. вставляешь сигнал signal_UpdateProgress в свою функцию и все готово.
emit signal_UpdateProgress(NewValue);
Причина редактирования: подправил оформление
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




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