crossplatform.ru

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

> ProgressBar на QtConcurrent
Fitz
  опции профиля:
сообщение 22.11.2010, 15:30
Сообщение #1


Студент
*

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

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




Репутация:   0  


Уважаемые, хочу прикрутить к терминалу COM-порта ProgressBar загрузки файла в порт.
Сделав, соответстветственно, загрузку файла отдельным потоком.
Заюзал Qt'шный экзампл Progress Dialog, где используют QtConcurrent.

Код:
mainwindow.h
class MainWindow : public QMainWindow, public Ui::UARTxxx{
    Q_OBJECT
private:
    void loadFile(const QString &fileName);
public slots:
    void open();
}

mainwindow.cpp
void MainWindow::loadFile(const QString &fileName)
{
     QFile file(fileName);
     if (!file.open(QIODevice::ReadOnly))
       {
         QMessageBox::warning(this, tr("Application"),
                              tr("Cannot read file %1:\n%2.")
                              .arg(fileName)
                              .arg(file.errorString()));
         return;
       }

                // посылка QByteArray прочитанный из файла в порт

}

void MainWindow::open()
{
        QString fileName = QFileDialog::getOpenFileName(this);
        if (!fileName.isEmpty())
        {
            QProgressDialog dialog;
            QList<QString> fileList;
            fileList.append(fileName);
            dialog.setLabelText(QString("Downloading..."));

            QFutureWatcher<void> futureWatcher;
            connect(&futureWatcher, SIGNAL(finished()), &dialog, SLOT(reset()));
            connect(&dialog, SIGNAL(canceled()), &futureWatcher, SLOT(cancel()));
            connect(&futureWatcher, SIGNAL(progressRangeChanged(int, int)), &dialog, SLOT(setRange(int, int)));
            connect(&futureWatcher, SIGNAL(progressValueChanged(int)), &dialog, SLOT(setValue(int)));

            futureWatcher.setFuture(QtConcurrent::map(fileList, MainWindow::loadFile));

            dialog.exec();

            futureWatcher.waitForFinished();
     }
}


Компилятор ругается в futureWatcher.setFuture(QtConcurrent::map(fileList, MainWindow::loadFile));, мол там нужен адрес функции, однако и подстановка адреса не помогает.
Что делаю не так?
Возможно есть более грамотное решение с QThread, подскажите.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




RSS Текстовая версия Сейчас: 14.1.2025, 5:31