PDA

View Full Version : Connect not working



xgoan
24th July 2006, 11:19
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? :confused:

Canvas.h file:

#pragma once

#include <QWidget>
#include <QPainter>

class Canvas:public QWidget{
public:
Canvas(QWidget *parent=0);
~Canvas();
public slots:
void translateX(int x);
void translateY(int y);
private:
void paintEvent(QPaintEvent *);

qreal trans_x,trans_y;
};

class wCanvas:public QWidget{
public:
wCanvas(QWidget *parent=0);
~wCanvas();
private:
Canvas *canvas;
};
Canvas.cpp file:

#include "Canvas.h"

#include <QGridLayout>
#include <QScrollBar>

// Implementación de Canvas
Canvas::Canvas(QWidget *parent):QWidget(parent),trans_x(0),trans_y(0){
setPalette(QPalette(Qt::white));
setAutoFillBackground(true);
}

Canvas::~Canvas(){
}

void Canvas::paintEvent(QPaintEvent *){
QPainter painter(this);

painter.translate(trans_x,trans_y);
// Fondo transparente
painter.setPen(Qt::lightGray);
painter.setBrush(Qt::lightGray);
painter.drawRect(0,0,width()/2-1,height()/2-1);
painter.drawRect(width()/2,height()/2,width()/2,height()/2);
// Fin fondo transparente

}

void Canvas::translateX(int x){
trans_x+=x;
}

void Canvas::translateY(int y){
trans_y+=y;
}

// Implementación de QCanvas
wCanvas::wCanvas(QWidget *parent):QWidget(parent){
canvas=new Canvas;
canvas->setMinimumSize(800,600);
QScrollBar *hScrollBar=new QScrollBar(Qt::Horizontal);
hScrollBar->setRange(-100,100);
hScrollBar->setValue(0);
QScrollBar *vScrollBar=new QScrollBar(Qt::Vertical);
vScrollBar->setRange(-100,100);
vScrollBar->setValue(0);

connect(hScrollBar,SIGNAL(sliderMoved(int)),canvas ,SLOT(translateX(int)));
connect(vScrollBar,SIGNAL(sliderMoved(int)),canvas ,SLOT(translateY(int)));

QGridLayout *gridLayout=new QGridLayout;
gridLayout->setMargin(0);
gridLayout->setSpacing(0);
gridLayout->addWidget(canvas,0,0);
gridLayout->addWidget(vScrollBar,0,1);
gridLayout->addWidget(hScrollBar,1,0);
setLayout(gridLayout);
}

wCanvas::~wCanvas(){
delete canvas;
}
Many thanks :)

amulya
24th July 2006, 12:13
u have to set "setSliderDown (true)"..this is responsible for sending the SliderMoved events

xgoan
24th July 2006, 12:20
With hScrollBar->setSliderDown(true) it's the same. I have tried valueChanged(int) too and nothing :crying:

evgenM
24th July 2006, 12:21
u forgot Q_OBJECT

xgoan
24th July 2006, 12:27
Ouch! Hehehe I thinked that Q_OBJECT is only needed when using signals in a class.

Thanks