Hi,
Zooming using signal/slot connection is working fine. When I try to do the same thing with panning I am getting the error:
"invalid use of incomplete type class QScrollBar ...hBar->setValue()..."
My code is:
{
if (e->buttons().testFlag(Qt::MidButton))
{
.
.
.
}
if (e->buttons().testFlag(Qt::LeftButton))
{
_lastPos = e->pos();
}
}
void MyGraphicsView
::mouseMoveEvent(QMouseEvent *event
) {
if (event->buttons().testFlag(Qt::LeftButton))
{
QPoint delta
= event
->pos
() - _lastPos;
_lastPos = event->pos();
emit panning_signal(delta);
}
}
void MainWindow
::panning(QPoint delta
) {
QScrollBar *hBar
= ui
->widget1
->horizontalScrollBar
();
QScrollBar *vBar
= ui
->widget1
->verticalScrollBar
();
hBar->setValue(hBar->value() + (isRightToLeft() ? delta.x() : -delta.x()));
vBar->setValue(vBar->value() - delta.y());
hBar = ui->widget2->horizontalScrollBar();
vBar = ui->widget2->verticalScrollBar();
hBar->setValue(hBar->value() + (isRightToLeft() ? delta.x() : -delta.x()));
vBar->setValue(vBar->value() - delta.y());
}
void MyGraphicsView::mousePressEvent(QMouseEvent * e)
{
if (e->buttons().testFlag(Qt::MidButton))
{
.
.
.
}
if (e->buttons().testFlag(Qt::LeftButton))
{
_lastPos = e->pos();
QGraphicsView::mousePressEvent(e);
}
}
void MyGraphicsView::mouseMoveEvent(QMouseEvent *event)
{
if (event->buttons().testFlag(Qt::LeftButton))
{
QPoint delta = event->pos() - _lastPos;
_lastPos = event->pos();
emit panning_signal(delta);
}
QGraphicsView::mouseMoveEvent(event);
}
QObject::connect(ui->widget1, SIGNAL(panning_signal(QPoint )), this, SLOT(panning(QPoint )));
QObject::connect(ui->widget2, SIGNAL(panning_signal(QPoint )), this, SLOT(panning(QPoint )));
void MainWindow::panning(QPoint delta)
{
QScrollBar *hBar = ui->widget1->horizontalScrollBar();
QScrollBar *vBar = ui->widget1->verticalScrollBar();
hBar->setValue(hBar->value() + (isRightToLeft() ? delta.x() : -delta.x()));
vBar->setValue(vBar->value() - delta.y());
hBar = ui->widget2->horizontalScrollBar();
vBar = ui->widget2->verticalScrollBar();
hBar->setValue(hBar->value() + (isRightToLeft() ? delta.x() : -delta.x()));
vBar->setValue(vBar->value() - delta.y());
}
To copy to clipboard, switch view to plain text mode
I tried before to make the panning with the translate function and it was not working either (no error but nothing was happening).
Any idea?
Thanks
Bookmarks