@dimoSSHka

Как в qt creator реализовать зависимость числа от ProgressBar?

Суть в том что есть прогресс бар. И мне нужно изменять переменную speed в разных частях прогресс бара до 50%. К примеру на прогресс баре 16% и текст изменился (не важно на какой так как это реализовано), потом к примеру эта зеленая полосочка дошла до 32 и текст опять поменялся. Как правильно все это сделать?
Код и скриншоты приложу. Заранее очень благодарен.5cfd2cd11c682604266350.png5cfd2cd51a7dd302560216.jpeg
#include "usbtest.h"
#include "ui_usbtest.h"
#include "QFile"
#include "QDebug"
#include "QTimer"
#include <QStorageInfo>
#include <QString>
#include "cstring"
#include "string.h"
#include "QWidget"

using namespace std;

long long allbyte;
int first_speed = 0;

usbtest::usbtest(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::usbtest)
{
    ui->setupUi(this);

    QFile file("path.txt");
    file.open(QIODevice::ReadOnly);
    QString file_path = file.readLine();
    file.close();

    QFile speed("speed.txt");
    speed.open(QIODevice::ReadOnly);
    first_speed = speed.readLine().toInt();
    speed.close();

    QStorageInfo storage(file_path);
    allbyte = storage.bytesTotal()/1024/1024;

    ui->progressBar->setMaximum(allbyte*2);

    QTimer* timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(onTimeout()));
    timer->start(1);

}

usbtest::~usbtest()
{
    delete ui;
}
int i = 0;
long long local_byte;

double my_rand() {
    double a = 0;
    a = qrand() % ((first_speed*10 + 9 + 1) - (first_speed-1)*10) + (first_speed-1)*10;
    return a/10;
}


void usbtest::onTimeout()
{

    if(local_byte != allbyte)
    {
        string lstrbyte = to_string(local_byte);
        ui->size->setText(QString::fromStdString(lstrbyte) + " MByte");
        ui->progressBar->setValue(++i);
        local_byte++;
        if(ui->progressBar->value() ==  qrand() % ((5 + 1) - 0) + 0)
        {
            ui->speed->setText((QString::number(my_rand())));
        }

        else if (ui->progressBar->value() ==  qrand() % ((15 + 1) - 10) + 10) {
            ui->speed->setText((QString::number(my_rand())));
        }
        else if (ui->progressBar->value() ==  qrand() % ((23 + 1) - 10) + 20) {
            ui->speed->setText((QString::number(my_rand())));
        }
        else if (ui->progressBar->value() ==  qrand() % ((40 + 1) - 10) + 35) {
            ui->speed->setText((QString::number(my_rand())));
        }
        else if (ui->progressBar->value() ==  qrand() % ((49 + 1) - 10) + 39) {
            ui->speed->setText((QString::number(my_rand())));
        }
        else {
            ui->speed->setText("Ты лох, нихера не рабботает");
        }

    }

    else {
        ui->size->setText("Ти лох");

    }
}


------------------------------------------------------------------------------------------------------------------------------
ВОТ КОД ГДЕ У МЕНЯ КОСЯК И ГДЕ РЕАЛИЗОВАН ТАЙМЕР (ЧТО БЫ ДОЛГО НЕ ИСКАТЬ)

void usbtest::onTimeout()
{

    if(local_byte != allbyte)
    {
        string lstrbyte = to_string(local_byte);
        ui->size->setText(QString::fromStdString(lstrbyte) + " MByte");
        ui->progressBar->setValue(++i);
        local_byte++;
        if(ui->progressBar->value() ==  qrand() % ((5 + 1) - 0) + 0)
        {
            ui->speed->setText((QString::number(my_rand())));
        }

        else if (ui->progressBar->value() ==  qrand() % ((15 + 1) - 10) + 10) {
            ui->speed->setText((QString::number(my_rand())));
        }
        else if (ui->progressBar->value() ==  qrand() % ((23 + 1) - 10) + 20) {
            ui->speed->setText((QString::number(my_rand())));
        }
        else if (ui->progressBar->value() ==  qrand() % ((40 + 1) - 10) + 35) {
            ui->speed->setText((QString::number(my_rand())));
        }
        else if (ui->progressBar->value() ==  qrand() % ((49 + 1) - 10) + 39) {
            ui->speed->setText((QString::number(my_rand())));
        }
        else {
            ui->speed->setText("Ты лох, нихера не рабботает");
        }

    }

    else {
        ui->size->setText("Ти лох");

    }
}
  • Вопрос задан
  • 1925 просмотров
Решения вопроса 1
Zoominger
@Zoominger
System Integrator
Воспользуйтесь сигналом прогресс-бара valueChanged(int), цепляйте к нему через connect функцию, которая будет менять текст.

https://doc.qt.io/qt-5/qprogressbar.html#valueChanged
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы