forked from Ivasoft/DSView
fix: The xcursor got an invalid dsosignal object after the signal is destroied
This commit is contained in:
@@ -758,7 +758,8 @@ namespace pv
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
dsv_info("SigSession::init_signals(), clear signals");
|
||||
clear_signals();
|
||||
|
||||
std::vector<view::Signal *>().swap(_signals);
|
||||
@@ -854,6 +855,7 @@ namespace pv
|
||||
|
||||
if (!sigs.empty())
|
||||
{
|
||||
dsv_info("SigSession::reload(), clear signals");
|
||||
clear_signals();
|
||||
std::vector<view::Signal *>().swap(_signals);
|
||||
_signals = sigs;
|
||||
@@ -1989,7 +1991,7 @@ namespace pv
|
||||
}
|
||||
|
||||
init_signals();
|
||||
dsv_info("%s", "Work mode is changed.");
|
||||
dsv_info("Switch work mode to:%d", mode);
|
||||
broadcast_msg(DSV_MSG_DEVICE_MODE_CHANGED);
|
||||
return true;
|
||||
}
|
||||
@@ -2070,7 +2072,7 @@ namespace pv
|
||||
{
|
||||
auto *p = _signals[i];
|
||||
p->sig_released(p);
|
||||
|
||||
|
||||
DESTROY_QT_LATER(p);
|
||||
}
|
||||
_signals.clear();
|
||||
|
||||
@@ -158,6 +158,12 @@ uint64_t dslDial::get_max()
|
||||
|
||||
uint64_t dslDial::get_value()
|
||||
{
|
||||
this->_div = this->_div;
|
||||
|
||||
if (_sel < 0 || _sel >= _value.count()){
|
||||
assert(false);
|
||||
}
|
||||
|
||||
return _value[_sel];
|
||||
}
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@ DsoSignal::DsoSignal(data::DsoSnapshot *data,
|
||||
|
||||
DsoSignal::DsoSignal(const DsoSignal &o)
|
||||
:Signal(NULL)
|
||||
{
|
||||
{
|
||||
}
|
||||
|
||||
DsoSignal::DsoSignal(DsoSignal &o)
|
||||
@@ -119,7 +119,7 @@ DsoSignal::DsoSignal(DsoSignal &o)
|
||||
|
||||
DsoSignal::~DsoSignal()
|
||||
{
|
||||
DESTROY_OBJECT(_vDial);
|
||||
DESTROY_OBJECT(_vDial);
|
||||
}
|
||||
|
||||
void DsoSignal::set_scale(int height)
|
||||
@@ -1502,6 +1502,7 @@ double DsoSignal::get_voltage(uint64_t index)
|
||||
|
||||
const double value = *_data->get_samples(index, index, get_index());
|
||||
const int hw_offset = get_hw_offset();
|
||||
|
||||
return (hw_offset - value) * _scale *
|
||||
_vDial->get_value() * _vDial->get_factor() *
|
||||
DS_CONF_DSO_VDIVS / get_view_rect().height();
|
||||
@@ -1509,19 +1510,15 @@ double DsoSignal::get_voltage(uint64_t index)
|
||||
|
||||
QString DsoSignal::get_voltage(double v, int p, bool scaled)
|
||||
{
|
||||
// if (_vDial == NULL)
|
||||
// return "";
|
||||
|
||||
this->_hover_en = this->_hover_en;
|
||||
|
||||
if (_vDial == NULL){
|
||||
assert(false);
|
||||
}
|
||||
}
|
||||
|
||||
if (scaled)
|
||||
v = v * _vDial->get_value() * _vDial->get_factor() * DS_CONF_DSO_VDIVS / get_view_rect().height();
|
||||
else
|
||||
v = v * _scale * _vDial->get_value() * _vDial->get_factor() * DS_CONF_DSO_VDIVS / get_view_rect().height();
|
||||
|
||||
return abs(v) >= 1000 ? QString::number(v/1000.0, 'f', p) + "V" : QString::number(v, 'f', p) + "mV";
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "view.h"
|
||||
#include "ruler.h"
|
||||
#include "dsosignal.h"
|
||||
#include "../log.h"
|
||||
|
||||
#include <QPainter>
|
||||
|
||||
@@ -162,6 +163,10 @@ void XCursor::paint(QPainter &p, const QRect &rect, XCur_type highlight, int or
|
||||
auto sig = _view.session().get_signal_by_index(_sig_index);
|
||||
if (sig != NULL){
|
||||
_dsoSig = dynamic_cast<DsoSignal*>(sig);
|
||||
|
||||
if (_dsoSig != NULL){
|
||||
connect(_dsoSig, SIGNAL(sig_released(void*)), this, SLOT(on_signal_deleted(void*)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user