Форум программистов  
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 17.10.2016, 17:00   #11
stasJun
Форумчанин
 
Регистрация: 17.10.2016
Сообщений: 95
Репутация: 10
По умолчанию

странно что оно кричит на слот:
Код:

void FindFilesWidget::progressChanged(int number)
{
    mProgressBar->setValue(mProgressBar->value() + ((number / mFileSize)* 100));
}

он у меня есть
stasJun вне форума   Ответить с цитированием
Старый 17.10.2016, 17:01   #12
stasJun
Форумчанин
 
Регистрация: 17.10.2016
Сообщений: 95
Репутация: 10
По умолчанию

Обжект додал:
Код:

#ifndef FIND_WORD_IN_FILE_THREAD_H
#define FIND_WORD_IN_FILE_THREAD_H

#include <QThread>
#include <QString>
#include <QtDebug>

class FindWordInFileThread : public QThread
{
    Q_OBJECT
public:
    FindWordInFileThread(const std::vector<QString>& filePath, const QString& word, size_t startIndex, size_t numElements, std::vector<QString>& foundFiles);
    virtual void run();
signals:
    void completed(qint64);
private:
    const std::vector<QString>& mFilePath;
    const QString mWord;
    size_t mStartIndex;
    size_t mNumElements;
    std::vector<QString>& mFoundFiles;
};

#endif // FIND_WORD_IN_FILE_THREAD_H

stasJun вне форума   Ответить с цитированием
Старый 17.10.2016, 17:29   #13
stasJun
Форумчанин
 
Регистрация: 17.10.2016
Сообщений: 95
Репутация: 10
По умолчанию

нашел одну ошибку:
нужно
Код:

 mActionState = ActionState::RUNNING;

а было
Код:

 mActionState == ActionState::RUNNING;

stasJun вне форума   Ответить с цитированием
Старый 17.10.2016, 17:33   #14
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 14,286
Репутация: 2784

icq: 512-7шесть5
skype: alexp.frl
По умолчанию

Дык mProgressBar это не FindFilesWidget.
3 параметром наверно this надо.

А еще лучше писать так, тогда бы сразу была видна ошибка:
Код:

connect(mThreads[index], &FindWordInFileThread::completed, this, &FindFilesWidget::progressChanged);

Код:

std::vector<FindWordInFileThread*> mThreads;

Alex11223 на форуме   Ответить с цитированием
Старый 17.10.2016, 17:45   #15
stasJun
Форумчанин
 
Регистрация: 17.10.2016
Сообщений: 95
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Дык mProgressBar это не FindFilesWidget.
3 параметром наверно this надо.

А еще лучше писать так, тогда бы сразу была видна ошибка:
Код:

connect(mThreads[index], &FindWordInFileThread::completed, this, &FindFilesWidget::progressChanged);

Код:

std::vector<FindWordInFileThread*> mThreads;

сделал:
Код:

for (size_t index = 0; index < mThreads.size(); ++index)
            connect(mThreads[index], &FindWordInFileThread::completed, this, &FindFilesWidget::progressChanged);

Код:

private:
    QGroupBox* createSelectDirectoryGroup();
    QGroupBox* createSearchWordGroup();
    QGroupBox* createProgressBarGroup();
    QGroupBox* createFoundFilesGroup();

    QLineEdit* mSearchDirectoryLine;
    QListWidget* mFoundFilesList;
    QLineEdit* mSearchWordLine;
    QPushButton* mStartButton;
    QProgressBar* mProgressBar;
    ActionState mActionState;
    std::vector<FindWordInFileThread*> mThreads;
    size_t mFileSize;

прогрес бар не работает(
stasJun вне форума   Ответить с цитированием
Старый 17.10.2016, 17:54   #16
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 14,286
Репутация: 2784

icq: 512-7шесть5
skype: alexp.frl
По умолчанию

int / int == int, то есть 1 / 2 == 0

Надо чтобы одно из чисел было не целым, например
Код:

number / (double) mFileSize

ну и в progressChanged тоже заменить на qint64 раз в completed оно.
Alex11223 на форуме   Ответить с цитированием
Старый 17.10.2016, 18:09   #17
stasJun
Форумчанин
 
Регистрация: 17.10.2016
Сообщений: 95
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
int / int == int, то есть 1 / 2 == 0

Надо чтобы одно из чисел было не целым, например
Код:

number / (double) mFileSize

ну и в progressChanged тоже заменить на qint64 раз в completed оно.
cделал спасибо, а можно както еще красивее сделать. а то у меня прогрес бар рывками делает, тоесть 10% потом 25% а не по 1% .
И почемуто кнопка стоп не работает, нажимаю на нее и крешится. А на старт нужно 2 драза нажать чтобы изменилось надпись на кансел. Хз почему. кажеться код правильный:
Код:

void FindFilesWidget::startClicked()
{
    if(mActionState == ActionState::STOPPED)
    {
        mActionState = ActionState::RUNNING;
        mStartButton->setText("&Cancel");
        .....................
    }
    else
    {
        mActionState = ActionState::STOPPED;
        mStartButton->setText("&Start");
        for (size_t index = 0; index < mThreads.size(); ++index)
            mThreads[index]->exit();
    }
}

stasJun вне форума   Ответить с цитированием
Старый 17.10.2016, 18:17   #18
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 14,286
Репутация: 2784

icq: 512-7шесть5
skype: alexp.frl
По умолчанию

Ну для прогресса не рывками надо сообщать не только completed, но и прогресс чтения каждого файла.

Но вообще если файлов много (например 1000), то оно ж и так не рывками будет. А если мало, то мгновенно завершится если они не по 100 МБ.
Alex11223 на форуме   Ответить с цитированием
Старый 17.10.2016, 18:27   #19
stasJun
Форумчанин
 
Регистрация: 17.10.2016
Сообщений: 95
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Ну для прогресса не рывками надо сообщать не только completed, но и прогресс чтения каждого файла.

Но вообще если файлов много (например 1000), то оно ж и так не рывками будет. А если мало, то мгновенно завершится если они не по 100 МБ.
но и прогресс чтения каждого файла. - а как это сделать, я не совсем Вас понял
Та у меня не по 100мб зараз но сразу 15% показало за 5 сек)
stasJun вне форума   Ответить с цитированием
Старый 17.10.2016, 18:30   #20
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 14,286
Репутация: 2784

icq: 512-7шесть5
skype: alexp.frl
По умолчанию

сообщать периодически сколько байт прочитано, в цикле чтения файла.
Alex11223 на форуме   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск слов в файле Stepan_P Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 0 25.12.2015 15:14
Поиск слов в текстовом файле slipkos Помощь студентам 4 02.06.2013 19:18
Поиск симметричных слов в файле Almost Паскаль 1 10.01.2013 08:53
Поиск слов в файле сушка Общие вопросы по программированию, компьютерным наукам 1 08.04.2012 12:44
Поиск слов в текстовом файле svt Помощь студентам 8 07.11.2009 20:56




19:01.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru