Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Horizontal slider missing randomly after startup #170

Closed
schneider42 opened this issue Sep 6, 2020 · 5 comments
Closed

Horizontal slider missing randomly after startup #170

schneider42 opened this issue Sep 6, 2020 · 5 comments

Comments

@schneider42
Copy link
Collaborator

schneider42 commented Sep 6, 2020

Sometimes when I start Inspectrum, the horizontal scrollbar doesn't show a slider:
Screenshot from 2020-09-06 14-04-24

After resizing the window, the slider appears:
Screenshot from 2020-09-06 14-04-41

I've put some logging into plotview.cpp:

@@ -181,6 +181,7 @@ void PlotView::enableCursors(bool enabled)
 }
 
 bool PlotView::viewportEvent(QEvent *event) {
+    qDebug() << "PlotView::viewportEvent " << event->type();
     // Handle wheel events for zooming (before the parent's handler to stop normal scrolling)
     if (event->type() == QEvent::Wheel) {
         QWheelEvent *wheelEvent = (QWheelEvent*)event;

Result when the slider appears after start:

PlotView::viewportEvent  QEvent::Type(CursorChange)
PlotView::viewportEvent  QEvent::Type(MouseTrackingChange)
PlotView::viewportEvent  QEvent::Type(Polish)
PlotView::viewportEvent  QEvent::Type(Move)
PlotView::viewportEvent  QEvent::Type(Resize)
PlotView::viewportEvent  QEvent::Type(Show)
PlotView::viewportEvent  QEvent::Type(ShowToParent)
PlotView::viewportEvent  QEvent::Type(PolishRequest)
PlotView::viewportEvent  QEvent::Type(Move)
PlotView::viewportEvent  QEvent::Type(Resize)
PlotView::viewportEvent  QEvent::Type(Move)
PlotView::viewportEvent  QEvent::Type(Resize)
PlotView::viewportEvent  QEvent::Type(UpdateLater)
PlotView::viewportEvent  QEvent::Type(Hide)
PlotView::viewportEvent  QEvent::Type(Move)
PlotView::viewportEvent  QEvent::Type(Resize)
PlotView::viewportEvent  QEvent::Type(Show)
PlotView::viewportEvent  QEvent::Type(Paint)
PlotView::viewportEvent  QEvent::Type(WindowActivate)
PlotView::viewportEvent  QEvent::Type(Move)
PlotView::viewportEvent  QEvent::Type(Resize)
PlotView::viewportEvent  QEvent::Type(Paint)

Result when the slider does not appear after start:

PlotView::viewportEvent  QEvent::Type(CursorChange)
PlotView::viewportEvent  QEvent::Type(MouseTrackingChange)
PlotView::viewportEvent  QEvent::Type(Polish)
PlotView::viewportEvent  QEvent::Type(Move)
PlotView::viewportEvent  QEvent::Type(Resize)
PlotView::viewportEvent  QEvent::Type(Show)
PlotView::viewportEvent  QEvent::Type(ShowToParent)
PlotView::viewportEvent  QEvent::Type(PolishRequest)
PlotView::viewportEvent  QEvent::Type(Move)
PlotView::viewportEvent  QEvent::Type(Resize)
PlotView::viewportEvent  QEvent::Type(Move)
PlotView::viewportEvent  QEvent::Type(Resize)
PlotView::viewportEvent  QEvent::Type(UpdateLater)
PlotView::viewportEvent  QEvent::Type(Hide)
PlotView::viewportEvent  QEvent::Type(Move)
PlotView::viewportEvent  QEvent::Type(Resize)
PlotView::viewportEvent  QEvent::Type(Move)
PlotView::viewportEvent  QEvent::Type(Resize)
PlotView::viewportEvent  QEvent::Type(Show)
PlotView::viewportEvent  QEvent::Type(Paint)
PlotView::viewportEvent  QEvent::Type(WindowActivate)

I'm not sure if the location of that print makes much sense, but there are differences between the two logs in terms of order.

My QT libraries have version 5.9.5 from Ubuntu 18.04

@schneider42
Copy link
Collaborator Author

schneider42 commented Sep 6, 2020

Some more debug prints:

@@ -181,6 +181,7 @@ void PlotView::enableCursors(bool enabled)
 }
 
 bool PlotView::viewportEvent(QEvent *event) {
+    qDebug() << "PlotView::viewportEvent " << event->type();
     // Handle wheel events for zooming (before the parent's handler to stop normal scrolling)
     if (event->type() == QEvent::Wheel) {
         QWheelEvent *wheelEvent = (QWheelEvent*)event;
@@ -369,6 +370,7 @@ void PlotView::invalidateEvent()
 
 void PlotView::repaint()
 {
+    qDebug() << "PlotView::repaint";
     viewport()->update();
 }
 
@@ -422,6 +424,7 @@ void PlotView::setPowerMax(int power)
 
 void PlotView::paintEvent(QPaintEvent *event)
 {
+    qDebug() << "PlotView::paintEvent " << event->type();
     if (mainSampleSource == nullptr) return;
 
     QRect rect = QRect(0, 0, width(), height());
@@ -517,6 +520,7 @@ int PlotView::plotsHeight()
 
 void PlotView::resizeEvent(QResizeEvent * event)
 {
+    qDebug() << "PlotView::resizeEvent " << event->type();
     updateView();
 }
 
@@ -548,6 +552,7 @@ void PlotView::updateViewRange(bool reCenter)
 
 void PlotView::updateView(bool reCenter)
 {
+    qDebug() << "PlotView::updateView";
     horizontalScrollBar()->setMaximum(std::max(0, sampleToColumn(mainSampleSource->count()) - width()));
     verticalScrollBar()->setMaximum(std::max(0, plotsHeight() - viewport()->height()));
     updateViewRange(reCenter);

Good:

PlotView::viewportEvent  QEvent::Type(CursorChange)
PlotView::viewportEvent  QEvent::Type(MouseTrackingChange)
PlotView::repaint
PlotView::repaint
PlotView::updateView
PlotView::repaint
PlotView::repaint
PlotView::repaint
PlotView::repaint
PlotView::repaint
PlotView::updateView
PlotView::repaint
PlotView::updateView
PlotView::updateView
PlotView::repaint
PlotView::repaint
PlotView::repaint
PlotView::viewportEvent  QEvent::Type(Polish)
PlotView::viewportEvent  QEvent::Type(Move)
PlotView::viewportEvent  QEvent::Type(Resize)
PlotView::resizeEvent  QEvent::Type(Resize)
PlotView::updateView
PlotView::viewportEvent  QEvent::Type(Show)
PlotView::viewportEvent  QEvent::Type(ShowToParent)
PlotView::viewportEvent  QEvent::Type(PolishRequest)
PlotView::viewportEvent  QEvent::Type(Move)
PlotView::viewportEvent  QEvent::Type(Resize)
PlotView::resizeEvent  QEvent::Type(Resize)
PlotView::updateView
PlotView::viewportEvent  QEvent::Type(Move)
PlotView::viewportEvent  QEvent::Type(Resize)
PlotView::resizeEvent  QEvent::Type(Resize)
PlotView::updateView
PlotView::viewportEvent  QEvent::Type(UpdateLater)
PlotView::viewportEvent  QEvent::Type(Hide)
PlotView::viewportEvent  QEvent::Type(Move)
PlotView::viewportEvent  QEvent::Type(Resize)
PlotView::resizeEvent  QEvent::Type(Resize)
PlotView::updateView
PlotView::viewportEvent  QEvent::Type(Show)
PlotView::viewportEvent  QEvent::Type(Paint)
PlotView::paintEvent  QEvent::Type(Paint)
PlotView::viewportEvent  QEvent::Type(Enter)
PlotView::viewportEvent  QEvent::Type(WindowActivate)
PlotView::viewportEvent  QEvent::Type(Move)
PlotView::viewportEvent  QEvent::Type(Resize)
PlotView::resizeEvent  QEvent::Type(Resize)
PlotView::updateView
PlotView::viewportEvent  QEvent::Type(Paint)
PlotView::paintEvent  QEvent::Type(Paint)

Bad:

PlotView::viewportEvent  QEvent::Type(CursorChange)
PlotView::viewportEvent  QEvent::Type(MouseTrackingChange)
PlotView::repaint
PlotView::repaint
PlotView::updateView
PlotView::repaint
PlotView::repaint
PlotView::repaint
PlotView::repaint
PlotView::repaint
PlotView::updateView
PlotView::repaint
PlotView::updateView
PlotView::updateView
PlotView::repaint
PlotView::repaint
PlotView::repaint
PlotView::viewportEvent  QEvent::Type(Polish)
PlotView::viewportEvent  QEvent::Type(Move)
PlotView::viewportEvent  QEvent::Type(Resize)
PlotView::resizeEvent  QEvent::Type(Resize)
PlotView::updateView
PlotView::viewportEvent  QEvent::Type(Show)
PlotView::viewportEvent  QEvent::Type(ShowToParent)
PlotView::viewportEvent  QEvent::Type(PolishRequest)
PlotView::viewportEvent  QEvent::Type(Move)
PlotView::viewportEvent  QEvent::Type(Resize)
PlotView::resizeEvent  QEvent::Type(Resize)
PlotView::updateView
PlotView::viewportEvent  QEvent::Type(Move)
PlotView::viewportEvent  QEvent::Type(Resize)
PlotView::resizeEvent  QEvent::Type(Resize)
PlotView::updateView
PlotView::viewportEvent  QEvent::Type(UpdateLater)
PlotView::viewportEvent  QEvent::Type(Hide)
PlotView::viewportEvent  QEvent::Type(Move)
PlotView::viewportEvent  QEvent::Type(Resize)
PlotView::resizeEvent  QEvent::Type(Resize)
PlotView::updateView
PlotView::viewportEvent  QEvent::Type(Move)
PlotView::viewportEvent  QEvent::Type(Resize)
PlotView::resizeEvent  QEvent::Type(Resize)
PlotView::updateView
PlotView::viewportEvent  QEvent::Type(Show)
PlotView::viewportEvent  QEvent::Type(Paint)
PlotView::paintEvent  QEvent::Type(Paint)
PlotView::viewportEvent  QEvent::Type(WindowActivate)

Screenshot from 2020-09-06 15-29-24

@miek
Copy link
Owner

miek commented Sep 6, 2020

Just to make sure I'm understanding right, I think you're actually talking about the horizontal scrollbar? (ie: for scrolling left or right in time).

So what seems to be happening is that the range of the scrollbar isn't getting set correctly. It has a slider, but it's full width because there's no range of movement available.
We set up the slider range in updateView based on the sample count and zoom/fft levels. It seems like in the 'bad' log, there's no updateView call after the WindowActivate event, so maybe the sliders end up just having default settings until some action triggers updateView to fix it.

@schneider42 schneider42 changed the title Vertical scrolling broken randomly after startup Horizontal slider missing randomly after startup Sep 6, 2020
@schneider42
Copy link
Collaborator Author

You are of course correct: I meant the horizontal scrollbar...

@schneider42
Copy link
Collaborator Author

schneider42 commented Sep 6, 2020

This patch solved the issue for me. It feels like a hack, though:

@@ -237,6 +238,10 @@ bool PlotView::viewportEvent(QEvent *event) {
                 return true;
     }
 
+    if (event->type() == QEvent::WindowActivate) {
+        updateView();
+    }
+
     // Handle parent eveents
     return QGraphicsView::viewportEvent(event);
 }

@schneider42
Copy link
Collaborator Author

Closed by #177

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants