For every zoom, xAxisChanged slot is triggered. So I set new range and values to increase the precision of QSlider, but it didn't work. When range size of QCustomPlot is smaller than one iteration width of QSlider, some areas get skipped.
AbstractMainWindow(parent),
ui(new Ui::View)
{
precision = 1000.0;
/* ui->horizontalScrollBar = QSlider*/
ui->horizontalScrollBar->setTracking(true);
ui->horizontalScrollBar->setVisible(false);
ui->horizontalScrollBar->setMinimum(0);
ui->horizontalScrollBar->setMaximum(precision);
}
void View::horzScrollBarChanged(int value)
{
double ratio = (double)value/(double)(ui->horizontalScrollBar->maximum());
double val = ratio*graphmaxValue;
qDebug()<<"horzScrollBarChanged value : " <<val << "range size:"<< plot->xAxis->range().size();
qDebug()<<"horzScrollBarChanged range : " << plot->xAxis->range();
plot->xAxis->setRange(val, plot->xAxis->range().size(), Qt::AlignCenter);
plot->replot();
}
void View::xAxisChanged(QCPRange range)
{
qDebug()<<"xAxisChanged : range " <<range << "range size:" <<range.size() << "range center:" << range.center();
int value = qRound((range.center()*precision)/graphmaxValue);
double currentRangeSize = range.size();
/* initialRangeSize is set when the plot is loaded firstly */
double ratio = currentRangeSize*1000/initialRangeSize;
int newSliderMaximum = (ratio)*1000;
ui->horizontalScrollBar->setMaximum(newSliderMaximum);
ui->horizontalScrollBar->adjustSize();
qDebug()<<"xAxisChanged horzScrollBar max: " << ui->horizontalScrollBar->maximum();
int newRangeValue = (value/1000.0)*(ui->horizontalScrollBar->maximum());
ui->horizontalScrollBar->setValue(newRangeValue);
}
View::View(QWidget *parent) :
AbstractMainWindow(parent),
ui(new Ui::View)
{
precision = 1000.0;
/* ui->horizontalScrollBar = QSlider*/
ui->horizontalScrollBar->setTracking(true);
ui->horizontalScrollBar->setVisible(false);
ui->horizontalScrollBar->setMinimum(0);
ui->horizontalScrollBar->setMaximum(precision);
}
void View::horzScrollBarChanged(int value)
{
double ratio = (double)value/(double)(ui->horizontalScrollBar->maximum());
double val = ratio*graphmaxValue;
qDebug()<<"horzScrollBarChanged value : " <<val << "range size:"<< plot->xAxis->range().size();
qDebug()<<"horzScrollBarChanged range : " << plot->xAxis->range();
plot->xAxis->setRange(val, plot->xAxis->range().size(), Qt::AlignCenter);
plot->replot();
}
void View::xAxisChanged(QCPRange range)
{
qDebug()<<"xAxisChanged : range " <<range << "range size:" <<range.size() << "range center:" << range.center();
int value = qRound((range.center()*precision)/graphmaxValue);
double currentRangeSize = range.size();
/* initialRangeSize is set when the plot is loaded firstly */
double ratio = currentRangeSize*1000/initialRangeSize;
int newSliderMaximum = (ratio)*1000;
ui->horizontalScrollBar->setMaximum(newSliderMaximum);
ui->horizontalScrollBar->adjustSize();
qDebug()<<"xAxisChanged horzScrollBar max: " << ui->horizontalScrollBar->maximum();
int newRangeValue = (value/1000.0)*(ui->horizontalScrollBar->maximum());
ui->horizontalScrollBar->setValue(newRangeValue);
}
To copy to clipboard, switch view to plain text mode
Bookmarks