我用QProgressBar显示了传感器的瞬时值。
传感器值的范围可以是0 to 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)
现在我有了一个为QProgressBar选择“阈值”值的QDoubleSpinBox,如下所示:

我执行了以下操作,以便将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上,有人能发现一些问题吗?
发布于 2020-08-25 23:42:27
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_Hwidget.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并运行这段代码,也许你会得到答案

https://stackoverflow.com/questions/63580434
复制相似问题