Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为QProgressBar设置阈值_C++_Qt - Fatal编程技术网

C++ 为QProgressBar设置阈值

C++ 为QProgressBar设置阈值,c++,qt,C++,Qt,我用QProgressBar显示传感器的瞬时值 传感器值的范围为0到0.5 为了在QProgressBar上显示这些值,我通过乘以100将0-0.5范围转换为整数范围 [0,0.5]->[0,50] ui->progressBar->setRange(0, 0.5*100); ui->progressBar->setValue(sensor_value*100.0); 因此,当接收到一个新值时,我将其乘以100 0.12*100=12/50 现在,我有一个QDou

我用QProgressBar显示传感器的瞬时值

传感器值的范围为0到0.5

为了在QProgressBar上显示这些值,我通过乘以100将0-0.5范围转换为整数范围

[0,0.5]->[0,50]

 ui->progressBar->setRange(0, 0.5*100);

 ui->progressBar->setValue(sensor_value*100.0);
因此,当接收到一个新值时,我将其乘以100 0.12*100=12/50

现在,我有一个QDoubleSpinBox来为QProgressBar选择阈值,如下所示:

为了将QDoubleSpinBox值转换为阈值,并在QProgressBar达到阈值时使用此阈值生成声音,我执行了以下操作

threshold = ((ui->doubleSpinBox->value()*100)/50); //---> not sure if this is right

ui->label->setText(QString::number(threshold, 'f',2 ));

if(sensor_value > threshold)
       {
           ui->rdo_btn_vertical->show();
           ui->rdo_btn_vertical->setStyleSheet(StyleSheetOn1);
           QSound::play(":/resources/beep1.wav");
       }
然而,这里的问题是,在上面的计算中,我没有得到正确的阈值。因此,我无法比较QProgressBar上显示的阈值和实际传感器值 有人能在那里发现一些问题吗?

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    double threshold;
    ~Widget();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include<QLabel>
#include<QTimer>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->progressBar->setRange(0, 0.5*100);
    ui->senser->setRange(0,0.5);
    ui->senser->setSingleStep(0.01);

    //setting threshold value from threshold spin box
    connect(ui->thresholdSpinBox,QOverload<double>::of(&QDoubleSpinBox::valueChanged),[&](){
         threshold = ((ui->thresholdSpinBox->value()*100)/50);
    });


    // i am taking senser value from another double spin box manually
    connect(ui->senser,QOverload<double>::of(&QDoubleSpinBox::valueChanged),this,[&]()
    {
            ui->progressBar->setValue(ui->senser->value()*100);
            if(ui->senser->value() > threshold)
               ui->notifier_label->setText("alert greator than threshold");
            QTimer::singleShot(3000,[=](){ui->notifier_label->clear();});

    });
}

Widget::~Widget()
{
    delete ui;
}



像这样设置ui并运行此代码,也许您会得到答案

我不明白。传感器_值是否在0-0.5范围内,是从传感器获取的精确值?如果是这样的话,您不需要从进度条进行任何转换,因为它是从spinbox获取的。请注意整数和双精度操作:您可以尝试使用ui->doubleSpinBox->value*100.0/50.0吗?任何一个好的编译器都应该对此抱怨,你的不是吗?因此,当收到一个新值时,我将它乘以100 0.12*100=12/50:你是什么意思?0.12*100=12,而不是12/50?假设doubleSpinBox的值在[0,50]范围内,为什么要使用*100/50?你想显示0.12还是12?