Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Astrologer от Май 03, 2010, 13:41



Название: Визуализация переменной из функции в потоке
Отправлено: 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 =)
}


Название: Re: Визуализация переменной из функции в потоке
Отправлено: garryHotDog от Май 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);
 




Название: Re: Визуализация переменной из функции в потоке
Отправлено: Astrologer от Май 03, 2010, 14:47
Спасибо большое, все просто и понятно. :) Единственное - не должно ли быть так -

Код
C++ (Qt)
connect(this, SIGNAL(signal_UpdateProgress(int)), this->ui->progressBar, SLOT(setValue(int)));
 


Название: Re: Визуализация переменной из функции в потоке
Отправлено: garryHotDog от Май 03, 2010, 15:43
Цитировать
Спасибо большое, все просто и понятно. Улыбающийся Единственное - не должно ли быть так -

зачем this->, можно ведь просто ui->!!


Название: Re: Визуализация переменной из функции в потоке
Отправлено: Astrologer от Май 03, 2010, 16:21
Хорошо. Спасибо еще раз.