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

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

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

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

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

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

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
там, где вы хотите закрыть окно. Если хотите. Я например не знаю зачем это делать и чем не подходит стандартный крестик.
мне препод сказал сделать так. поєтому я и делаю)
stasJun вне форума Ответить с цитированием
Старый 25.10.2016, 14:53   #122
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

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

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Как "так"?
Сообщение при закрытии сделано ж уже.
да, но я не знаю где мне close() вставить. если в старт функцию то оно там где не нужно выскакивает это сообщение, когда я выбираю путь, нажимаю старт и т.д если в кансел аналогично, если в конструктор то оно перед виджетом выскакивает
stasJun вне форума Ответить с цитированием
Старый 25.10.2016, 15:07   #124
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

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

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А когда нужно-то?
когда я жму на хрестик
stasJun вне форума Ответить с цитированием
Старый 25.10.2016, 15:14   #126
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

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

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
просто вызвать close где угодно.
все работает. спасибо. не нужно было нигде вызывать close() .
stasJun вне форума Ответить с цитированием
Старый 31.10.2016, 17:13   #128
stasJun
Пользователь
 
Регистрация: 17.10.2016
Сообщений: 95
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Так оно и без вызовов close должно быть.
Мне препод сказад прогрес вдругой виджет перенести, я перенессм фото), но потом когда перес и все что связаное с прогресом, выдает ошибку тут:
D:\Development\Pavlik\Qt\FindFiles\ FindFilesWidget.cpp:90: error: C2664: 'QMetaObject::Connection QObject::connect(const QObject *,const char *,const char *,Qt::ConnectionType) const' : cannot convert argument 3 from 'ProgressWidget' to 'const QObject *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

Код:
QObject::connect(mThreads[index], SIGNAL(progressChanged(qint64)), *mProgressWidget, SLOT(progressChanged(qint64)));
я же по идее все верно передаю mProgressWidget.
мой виджет прогрес:
Код:
#ifndef PROGRESSWIDGET_H
#define PROGRESSWIDGET_H

#include "FindWordInFilesThread.h"
#include <QtWidgets>

class ProgressWidget : public QWidget
{
    Q_OBJECT

public:
    enum ActionState
    {
        PAUSED,
        CONTINUED,
    };
    ProgressWidget();
    ProgressWidget(qint64 directorySizeInBytes, QWidget* parent = 0);
    void progressChanged(qint64 bytesProcessed);
    //~ProgressBarWidget();

public slots:
    void pauseClicked();
private:
    QProgressBar* mProgressBar;
    QPushButton* mPauseOrContinueButton;
    ActionState mActionState;
    qint64 mDirectorySizeInBytes;
    qint64 mBytesProcessed;
};

#endif // PROGRESSWIDGET_H
Код:
#include "ProgressWidget.h"

ProgressWidget::ProgressWidget(){}
ProgressWidget::ProgressWidget(qint64 directorySizeInBytes, QWidget *parent)
    : QWidget(parent)
    , mActionState(ActionState::PAUSED)
    , mDirectorySizeInBytes(directorySizeInBytes)
    , mBytesProcessed(0)
{
    setWindowTitle("Progress");
    mProgressBar = new QProgressBar();
    mProgressBar->setRange(0, 5);
    mProgressBar->setMinimumWidth(200);
    mProgressBar->setAlignment(Qt::AlignCenter);
    mProgressBar->setValue(0);
    mPauseOrContinueButton = new QPushButton("&Pause");
    QHBoxLayout* hLayout = new QHBoxLayout();
    hLayout->setSpacing(6);
    hLayout->setContentsMargins(11, 11, 11, 11);
    hLayout->addWidget(mProgressBar);
    hLayout->addWidget(mPauseOrContinueButton);
    connect(mPauseOrContinueButton, SIGNAL(clicked()), SLOT(pauseClicked()));

    setLayout(hLayout);
    resize(100, 100);
}
void ProgressWidget::pauseClicked()
{

}
void ProgressWidget::progressChanged(qint64 bytesProcessed)
{
    mBytesProcessed += bytesProcessed;
    int progressValue = 100 * ((float)mBytesProcessed / (float)mDirectorySizeInBytes);
    mProgressBar->setValue(progressValue);
    if (mBytesProcessed == mDirectorySizeInBytes)
    {
        mActionState = ActionState::PAUSED;
        mPauseOrContinueButton->setText("&Contiue");
    }
}

//void ProgressWidget::~ProgressBarWidget()
//{

//}
и старт кликет функцию, где я додаю конект делаю прогрес виджета
Код:
void FindFilesWidget::startClicked()
{
    connect(mProgressWidget, SIGNAL(clicked()), SLOT(pauseClicked()));
    mProgressWidget->show();
    if (mActionState == ActionState::STOPPED)
    {
        mFoundFilesList->clear();

        mActionState = ActionState::RUNNING;
        mStartButton->setText("&Cancel");

        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);
        while (dirIt.hasNext())
        {
            dirIt.next();
            QFileInfo fileInfo(dirIt.filePath());
            if (fileInfo.isFile())
            {
                if (fileInfo.suffix() == "txt")
                {
                    mPaths.push_back(dirIt.filePath());
                }
            }
        }

        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));

        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();
    }
    else
    {
        mActionState = ActionState::STOPPED;
        mStartButton->setText("&Start");
        for (size_t index = 0; index < mThreads.size(); ++index)
            mThreads[index]->cancel();
    }
}
Изображения
Тип файла: png скрин.png (16.8 Кб, 29 просмотров)

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

Зачем * перед mProgressWidget?
* в данном контексте это разыменование указателя, а надо ж как раз указатель и передать.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 31.10.2016, 17:51   #130
stasJun
Пользователь
 
Регистрация: 17.10.2016
Сообщений: 95
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Зачем * перед mProgressWidget?
* в данном контексте это разыменование указателя, а надо ж как раз указатель и передать.
а если без него то когда я жму на стар крешится програма
Код:
 QObject::connect(mThreads[index], SIGNAL(progressChanged(qint64)), mProgressWidget, SLOT(progressChanged(qint64)));
SLOT(pauseClicked())) - должен ж progresswidget быть реализован?
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