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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2016, 11:49   #151
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Зачем сигналы? Просто public функцию (или слот, не важно) и вызвать ее.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 03.11.2016, 12:04   #152
stasJun
Пользователь
 
Регистрация: 17.10.2016
Сообщений: 95
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Зачем сигналы? Просто public функцию (или слот, не важно) и вызвать ее.
ок, я создал слот
Код:
void ProgressWidget::restart()
{
    mProgressBar->setValue(0);
}
Код:
void FindFilesWidget::startClicked()
{
    mFoundFilesList->clear();
    mProgressWidget->restart();
я ж все правильно делаю?
stasJun вне форума Ответить с цитированием
Старый 03.11.2016, 12:06   #153
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

да.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 03.11.2016, 12:14   #154
stasJun
Пользователь
 
Регистрация: 17.10.2016
Сообщений: 95
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
да.
хм, но при нажатии кнопки старт програма вылитает
stasJun вне форума Ответить с цитированием
Старый 03.11.2016, 12:20   #155
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Видимо что-то null.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 03.11.2016, 12:48   #156
stasJun
Пользователь
 
Регистрация: 17.10.2016
Сообщений: 95
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Видимо что-то null.
Хм, посмотрел, всек гуд должно быть
Код:
#include "FindFilesWidget.h"

struct Range
{
    Range(size_t start, size_t length);

    size_t mStart;
    size_t mLength;
};

Range::Range(size_t start, size_t length)
    : mStart(start)
    , mLength(length)
{}

std::vector<Range> GenerateRanges(size_t numRanges, size_t numFiles)
{
    std::vector<Range> ranges;
    ranges.reserve(numRanges);

    const size_t minLength = numFiles / numRanges;
    const size_t modulo = numFiles % numRanges;

    for (size_t index = 0; index < modulo; ++index)
        ranges.push_back(Range(0, minLength + 1));

    for (size_t index = modulo; index < numRanges; ++index)
        ranges.push_back(Range(0, minLength));

    for (size_t index = 1; index < numRanges; ++index)
        ranges[index].mStart = ranges[index - 1].mStart + ranges[index - 1].mLength;

    return ranges;
}

FindFilesWidget::FindFilesWidget(QWidget *parent)
    : QWidget(parent)
    , mProgressWidget(nullptr)
{
    setWindowTitle("Find Files");

    QVBoxLayout* vLayout = new QVBoxLayout(this);
    vLayout->setSpacing(6);
    vLayout->setContentsMargins(11, 11, 11, 11);
    vLayout->addWidget(createSelectDirectoryGroup());
    vLayout->addWidget(createSearchWordGroup());
    vLayout->addWidget(createFoundFilesGroup());
    setLayout(vLayout);
    resize(600, 600);
}

void FindFilesWidget::startClicked()
{
    mFoundFilesList->clear();
    //mProgressWidget->restart();
    const int idealThreadCount = QThread::idealThreadCount();
    for (size_t index = 0; index < mThreads.size(); ++index)
        delete mThreads[index];
    mThreads.clear();
    mThreads.reserve(idealThreadCount);

    mPaths.clear();
    QDirIterator dirIt(mSearchDirectoryLine->text(), QDirIterator::Subdirectories);
    qint64 directorySizeInBytes = 0;
    while (dirIt.hasNext())
    {
        dirIt.next();
        QFileInfo fileInfo(dirIt.filePath());
        if (fileInfo.isFile())
        {
            if (fileInfo.suffix() == "txt")
            {
                mPaths.push_back(dirIt.filePath());
                directorySizeInBytes += fileInfo.size();
            }
        }
    }

    const std::vector<Range> ranges = GenerateRanges(idealThreadCount, mPaths.size());
    for (size_t index = 0; index < idealThreadCount; ++index)
        mThreads.push_back(new FindWordInFilesThread(mPaths, mSearchWordLine->text(), ranges[index].mStart, ranges[index].mLength));

    if (mProgressWidget == nullptr)
       mProgressWidget = new ProgressWidget(directorySizeInBytes);

    QObject::connect(mProgressWidget, SIGNAL(finished()), this, SLOT(finished()));
    QObject::connect(mProgressWidget, SIGNAL(paused()), this, SLOT(pausedClicked()));
    QObject::connect(mProgressWidget, SIGNAL(continued()), this, SLOT(continuedClicked()));
    QObject::connect(mProgressWidget, SIGNAL(canceled()), this, SLOT(cancelClicked()));

    mProgressWidget->show();

    for (size_t index = 0; index < idealThreadCount; ++index)
    {
        QObject::connect(mThreads[index], SIGNAL(progressChanged(qint64)), mProgressWidget, SLOT(progressChanged(qint64)));
        QObject::connect(mThreads[index], SIGNAL(fileFound(const QString&)), this, SLOT(fileFound(const QString&)));
    }

    for (size_t index = 0; index < idealThreadCount; ++index)
        mThreads[index]->start();

}

void FindFilesWidget::fileFound(const QString& fileName)
{
    mFoundFilesList->addItem(fileName);
}

void FindFilesWidget::selectDirectoryClicked()
{
    QString selectedDirectory = QFileDialog::getExistingDirectory(this, tr("Open Directory"), mSearchDirectoryLine->text(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
    mSearchDirectoryLine->setText(selectedDirectory);
}

QGroupBox* FindFilesWidget::createSelectDirectoryGroup()
{
    QGroupBox* selectDirectoryGroup = new QGroupBox("&Select directory:");
    QPushButton* selectDirectoryButton = new QPushButton("Select", selectDirectoryGroup);
    mSearchDirectoryLine = new QLineEdit(tr("D:/"), selectDirectoryGroup);

    QHBoxLayout* hLayout = new QHBoxLayout();
    hLayout->setSpacing(6);
    hLayout->addWidget(mSearchDirectoryLine);
    hLayout->addWidget(selectDirectoryButton);

    connect(selectDirectoryButton, SIGNAL(clicked()), SLOT(selectDirectoryClicked()));

    selectDirectoryGroup->setLayout(hLayout);
    return selectDirectoryGroup;
}

QGroupBox* FindFilesWidget::createSearchWordGroup()
{
    QGroupBox* searchWordGroup = new QGroupBox("&Search word:");
    mSearchWordLine = new QLineEdit(searchWordGroup);
    mStartButton = new QPushButton("&Start");

    QHBoxLayout* hLayout = new QHBoxLayout();
    hLayout->setSpacing(6);
    hLayout->setContentsMargins(11, 11, 11, 11);
    hLayout->addWidget(mSearchWordLine);
    hLayout->addWidget(mStartButton);

    connect(mStartButton, SIGNAL(clicked()), SLOT(startClicked()));

    searchWordGroup->setLayout(hLayout);
    return searchWordGroup;
}

QGroupBox* FindFilesWidget::createFoundFilesGroup()
{
    QGroupBox* foundFilesGroup = new QGroupBox("&Found files:");
    mFoundFilesList = new QListWidget(foundFilesGroup);

    QHBoxLayout* hLayout = new QHBoxLayout();
    hLayout->setSpacing(6);
    hLayout->setContentsMargins(11, 11, 11, 11);
    hLayout->addWidget(mFoundFilesList);

    foundFilesGroup->setLayout(hLayout);
    return foundFilesGroup;
}
stasJun вне форума Ответить с цитированием
Старый 03.11.2016, 12:48   #157
stasJun
Пользователь
 
Регистрация: 17.10.2016
Сообщений: 95
По умолчанию

с самого начала я инициализовую
Код:
FindFilesWidget::FindFilesWidget(QWidget *parent)
    : QWidget(parent)
    , mProgressWidget(nullptr)
но так и надо
stasJun вне форума Ответить с цитированием
Старый 03.11.2016, 12:53   #158
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от stasJun Посмотреть сообщение
так и надо
Ну тогда и программе так и надо вылетать когда вы вызываете функцию через указатель на null.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 03.11.2016, 13:16   #159
stasJun
Пользователь
 
Регистрация: 17.10.2016
Сообщений: 95
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Ну тогда и программе так и надо вылетать когда вы вызываете функцию через указатель на null.
ок. если я уберу от туда mProgressWidget(nullptr), програма всеравно крешится. Если Вы знаете в чем проблема скажите, не нужно ту загадками говорить.
stasJun вне форума Ответить с цитированием
Старый 03.11.2016, 13:17   #160
stasJun
Пользователь
 
Регистрация: 17.10.2016
Сообщений: 95
По умолчанию

мне всервно нужно сначала инициализировать ее чем то
stasJun вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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