Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

странно что оно кричит на слот:
Код:
void FindFilesWidget::progressChanged(int number)
{
    mProgressBar->setValue(mProgressBar->value() + ((number / mFileSize)* 100));
}
он у меня есть
stasJun вне форума Ответить с цитированием
Старый 17.10.2016, 16:01   #12
stasJun
Пользователь
 
Регистрация: 17.10.2016
Сообщений: 95
По умолчанию

Обжект додал:
Код:
#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, 16:29   #13
stasJun
Пользователь
 
Регистрация: 17.10.2016
Сообщений: 95
По умолчанию

нашел одну ошибку:
нужно
Код:
 mActionState = ActionState::RUNNING;
а было
Код:
 mActionState == ActionState::RUNNING;
stasJun вне форума Ответить с цитированием
Старый 17.10.2016, 16:33   #14
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

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

А еще лучше писать так, тогда бы сразу была видна ошибка:
Код:
connect(mThreads[index], &FindWordInFileThread::completed, this, &FindFilesWidget::progressChanged);
Код:
std::vector<FindWordInFileThread*> mThreads;
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 17.10.2016, 16:45   #15
stasJun
Пользователь
 
Регистрация: 17.10.2016
Сообщений: 95
По умолчанию

Цитата:
Сообщение от 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, 16:54   #16
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

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

Надо чтобы одно из чисел было не целым, например
Код:
number / (double) mFileSize
ну и в progressChanged тоже заменить на qint64 раз в completed оно.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 17.10.2016, 17:09   #17
stasJun
Пользователь
 
Регистрация: 17.10.2016
Сообщений: 95
По умолчанию

Цитата:
Сообщение от 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, 17:17   #18
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

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

Но вообще если файлов много (например 1000), то оно ж и так не рывками будет. А если мало, то мгновенно завершится если они не по 100 МБ.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 17.10.2016, 17:27   #19
stasJun
Пользователь
 
Регистрация: 17.10.2016
Сообщений: 95
По умолчанию

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

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

сообщать периодически сколько байт прочитано, в цикле чтения файла.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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