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

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

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

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

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

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

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Да удаление-то ладно, но там ж сейчас всегда будет висеть кнопка отмены (пока ее не нажмут) когда на самом деле потоки давно остановились.



это не сигнал, просто переопределяемая функция родительского класса.
ок . а как мне ее в свой сигнал всунуть. вернее куда?
тут тоже нужно удаления потоков делать?
Код:
 else
    {
        mActionState = ActionState::STOPPED;
        mStartButton->setText("&Start");
        for (size_t index = 0; index < mThreads.size(); ++index)
            mThreads[index]->cancel();
    }
stasJun вне форума Ответить с цитированием
Старый 25.10.2016, 09:39   #102
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Нельзя удалять когда вздумается, надо ждать завершения.
После вызова cancel он же может и не мгновенно завершиться.

И я бы убрал отсюда
Цитата:
Код:
        mActionState = ActionState::STOPPED;
        mStartButton->setText("&Start");
чтобы не путаться (и не копипастить код) и делал бы это только в одном месте после определения того, что поиск завершился.

На предыдущих страницах я ж предлагал один вариант как можно определять завершение поиска (считать в слоте завершенные файлы). Это правда работало бы только для обычного завершения, а не отмены или ошибки.

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

Последний раз редактировалось Alex11223; 25.10.2016 в 09:43.
Alex11223 вне форума Ответить с цитированием
Старый 25.10.2016, 09:54   #103
stasJun
Пользователь
 
Регистрация: 17.10.2016
Сообщений: 95
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Нельзя удалять когда вздумается, надо ждать завершения.
После вызова cancel он же может и не мгновенно завершиться.

И я бы убрал отсюда

чтобы не путаться (и не копипастить код) и делал бы это только в одном месте после определения того, что поиск завершился.

На предыдущих страницах я ж предлагал один вариант как можно определять завершение поиска (считать в слоте завершенные файлы). Это правда работало бы только для обычного завершения, а не отмены или ошибки.

В общем я бы добавил в потоке сигнал типа threadCompleted и вызывал бы его при любом варианте завершения потока (просмотрел все файлы, ошибка, отмена) в самом конце.
В слоте для него считать количество завершенных потоков и когда все завершатся удалять и возвращать кнопки и т.п.
ок. это буду делать потом. зараз хрестик нужно сделать. поочередно делать буду)
о хрестике: а как мне ее в свой сигнал всунуть. вернее куда?
stasJun вне форума Ответить с цитированием
Старый 25.10.2016, 09:57   #104
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Что засунуть? Если надо выдавать сообщение типа "точно закрыть?", то это не сигналом делается, по ссылке на предыдущей странице пример.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 25.10.2016, 10:07   #105
stasJun
Пользователь
 
Регистрация: 17.10.2016
Сообщений: 95
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Что засунуть? Если надо выдавать сообщение типа "точно закрыть?", то это не сигналом делается, по ссылке на предыдущей странице пример.
смотрите, есть у меня функция:
Код:
void FindFilesWidget::closeEvent(QCloseEvent* event)
{
    QMessageBox::StandardButton resBtn = QMessageBox::question( this, APP_NAME, tr("Are you sure?\n"), QMessageBox::Cancel | QMessageBox::No | QMessageBox::Yes, QMessageBox::Yes);
        if (resBtn != QMessageBox::Yes)
        {
            event->ignore();
        } 
        else 
        {
            event->accept();
        }
}
где ее использовать если не в конеткт чтобы закрыть програму?

Последний раз редактировалось stasJun; 25.10.2016 в 10:10.
stasJun вне форума Ответить с цитированием
Старый 25.10.2016, 10:21   #106
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
просто нажал на хрестик и закрыл
Дык стандартный крестик так и работает.


А если свою кнопку закрытия сделать надо, то просто http://doc.qt.io/qt-5/qwidget.html#close
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 25.10.2016, 10:25   #107
stasJun
Пользователь
 
Регистрация: 17.10.2016
Сообщений: 95
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Дык стандартный крестик так и работает.


А если свою кнопку закрытия сделать надо, то просто http://doc.qt.io/qt-5/qwidget.html#close
я имею введу чтобы сообщения выскакивало типа вы точно хотите закрыть?
да выходит свою кнопку. и создал функцию, где мне ее использовать чтобы работало?
stasJun вне форума Ответить с цитированием
Старый 25.10.2016, 10:29   #108
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

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

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
просто вызвать close где угодно.
я тут вызову, в конструкторе
Код:
FindFilesWidget::FindFilesWidget(QWidget *parent)
    : QWidget(parent)
    , mActionState(ActionState::STOPPED)
    , mDirectorySizeInBytes(0)
    , mBytesProcessed(0)
    , mIdealThreadCount(QThread::idealThreadCount())
{
    setWindowTitle("Search Files");

    QVBoxLayout* vLayout = new QVBoxLayout(this);
    vLayout->setSpacing(6);
    vLayout->setContentsMargins(11, 11, 11, 11);
    vLayout->addWidget(createSelectDirectoryGroup());
    vLayout->addWidget(createSearchWordGroup());
    vLayout->addWidget(createProgressBarGroup());
    vLayout->addWidget(createFoundFilesGroup());
    setLayout(vLayout);
    closeEvent(event); // какой  тут  аргумент передавать в место event?
    resize(600, 600);
}
stasJun вне форума Ответить с цитированием
Старый 25.10.2016, 11:00   #110
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

close(), а не closeEvent.
Ушел с форума, 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