I'm working in a program that draws in a QPainter surface objects. I want to connect 2 scrollbars with translate() of QPainter and it isn't working.
Can you say me what i'm doing wrong?

Canvas.h file:
Qt Code:
  1. #pragma once
  2.  
  3. #include <QWidget>
  4. #include <QPainter>
  5.  
  6. class Canvas:public QWidget{
  7. public:
  8. Canvas(QWidget *parent=0);
  9. ~Canvas();
  10. public slots:
  11. void translateX(int x);
  12. void translateY(int y);
  13. private:
  14. void paintEvent(QPaintEvent *);
  15.  
  16. qreal trans_x,trans_y;
  17. };
  18.  
  19. class wCanvas:public QWidget{
  20. public:
  21. wCanvas(QWidget *parent=0);
  22. ~wCanvas();
  23. private:
  24. Canvas *canvas;
  25. };
To copy to clipboard, switch view to plain text mode 
Canvas.cpp file:
Qt Code:
  1. #include "Canvas.h"
  2.  
  3. #include <QGridLayout>
  4. #include <QScrollBar>
  5.  
  6. // Implementación de Canvas
  7. Canvas::Canvas(QWidget *parent):QWidget(parent),trans_x(0),trans_y(0){
  8. setPalette(QPalette(Qt::white));
  9. setAutoFillBackground(true);
  10. }
  11.  
  12. Canvas::~Canvas(){
  13. }
  14.  
  15. void Canvas::paintEvent(QPaintEvent *){
  16. QPainter painter(this);
  17.  
  18. painter.translate(trans_x,trans_y);
  19. // Fondo transparente
  20. painter.setPen(Qt::lightGray);
  21. painter.setBrush(Qt::lightGray);
  22. painter.drawRect(0,0,width()/2-1,height()/2-1);
  23. painter.drawRect(width()/2,height()/2,width()/2,height()/2);
  24. // Fin fondo transparente
  25.  
  26. }
  27.  
  28. void Canvas::translateX(int x){
  29. trans_x+=x;
  30. }
  31.  
  32. void Canvas::translateY(int y){
  33. trans_y+=y;
  34. }
  35.  
  36. // Implementación de QCanvas
  37. wCanvas::wCanvas(QWidget *parent):QWidget(parent){
  38. canvas=new Canvas;
  39. canvas->setMinimumSize(800,600);
  40. QScrollBar *hScrollBar=new QScrollBar(Qt::Horizontal);
  41. hScrollBar->setRange(-100,100);
  42. hScrollBar->setValue(0);
  43. QScrollBar *vScrollBar=new QScrollBar(Qt::Vertical);
  44. vScrollBar->setRange(-100,100);
  45. vScrollBar->setValue(0);
  46.  
  47. connect(hScrollBar,SIGNAL(sliderMoved(int)),canvas,SLOT(translateX(int)));
  48. connect(vScrollBar,SIGNAL(sliderMoved(int)),canvas,SLOT(translateY(int)));
  49.  
  50. QGridLayout *gridLayout=new QGridLayout;
  51. gridLayout->setMargin(0);
  52. gridLayout->setSpacing(0);
  53. gridLayout->addWidget(canvas,0,0);
  54. gridLayout->addWidget(vScrollBar,0,1);
  55. gridLayout->addWidget(hScrollBar,1,0);
  56. setLayout(gridLayout);
  57. }
  58.  
  59. wCanvas::~wCanvas(){
  60. delete canvas;
  61. }
To copy to clipboard, switch view to plain text mode 
Many thanks