QGraphicsView scrollen ausschalten
QGraphicsView scrollen ausschalten
Hallo
Ich würde gerne mit dem Mausrad eine Scene in einem GrahpicsView zoomen, jedoch liegt standardmäßig das scrollen des GraphicsView auf dem mausrad.
Wie kann ich das ausstellen?
Gruß
OnJen
Ich würde gerne mit dem Mausrad eine Scene in einem GrahpicsView zoomen, jedoch liegt standardmäßig das scrollen des GraphicsView auf dem mausrad.
Wie kann ich das ausstellen?
Gruß
OnJen
-
-=Freaky=-
- Beiträge: 503
- Registriert: 29. Dezember 2006 22:54
- Wohnort: HL
du kannst das wheelEvent ueberladen.
bei mir sieht das so aus:
die zeile steps = ... (anzahl der "schritte") ergibt sich aus der doku zu QWheelEvent::delta (), der faktor 0.3 hat bei mir gut funktioniert, ist aber zufaellig gewaehlt.
mfg,
julian
bei mir sieht das so aus:
Code: Alles auswählen
void MainWindow::wheelEvent(QWheelEvent *event)
{
if(event->modifiers() & Qt::ControlModifier)
{
int steps = event->delta() / (8 * 15);
qreal zoom = steps * 0.3;
m_graphicsView->scale(1.0 + zoom, 1.0 + zoom);
}
else
QMainWindow::wheelEvent(event);
}mfg,
julian
Zuletzt geändert von -=Freaky=- am 2. April 2010 12:55, insgesamt 1-mal geändert.
danke für die Antwort Freaky, aber mein problem ist ein bisschen ein anderes.
Und zwar habe ich für die Scene eine eigene Klasse, der View jedoch ist in der Mainwindow Klasse.
Das wheelEvent ist in der Scene Klasse wird aber einfach von dem scrollen der View in der MainWindow Klasse überlagert.
Doch wie kann ich das ausstellen beim View?
Gruß
OnJen
Und zwar habe ich für die Scene eine eigene Klasse, der View jedoch ist in der Mainwindow Klasse.
Das wheelEvent ist in der Scene Klasse wird aber einfach von dem scrollen der View in der MainWindow Klasse überlagert.
Doch wie kann ich das ausstellen beim View?
Gruß
OnJen
-
-=Freaky=-
- Beiträge: 503
- Registriert: 29. Dezember 2006 22:54
- Wohnort: HL
entweder ich verstehe dich nicht, oder der aufbau ist bei uns beiden derselbe ... (?)
ein QMainWindow enthaelt ein QGraphicsView, worin eine QGraphicsScene dargestellt wird.
ueberlaedt man das wheelEvent des QMainWindow, passiert, was du willst - denke ich.
wenn du im QMainWindow das event dann in einem best. fall (bei mir, wie du siehst, wenn gleichzeitig CTRL gedrueckt ist) nicht weiterleitest, kommt es auch nicht beim QGraphicsView oder der QGraphicsScene an.
ich habe jetzt das QGraphicsView rangezoomt, aber ueber QGraphicsView()::scene() kannst du das sicher auch mit der scene machen ...
// edit: wenn du es in der scene machen willst, musst du ggf. eine klasse von QGraphicsView ableiten und das wheelEvent auch da ueberladen, oder einen eventFilter dafuer benutzen
mfg,
julian
ein QMainWindow enthaelt ein QGraphicsView, worin eine QGraphicsScene dargestellt wird.
ueberlaedt man das wheelEvent des QMainWindow, passiert, was du willst - denke ich.
wenn du im QMainWindow das event dann in einem best. fall (bei mir, wie du siehst, wenn gleichzeitig CTRL gedrueckt ist) nicht weiterleitest, kommt es auch nicht beim QGraphicsView oder der QGraphicsScene an.
ich habe jetzt das QGraphicsView rangezoomt, aber ueber QGraphicsView()::scene() kannst du das sicher auch mit der scene machen ...
// edit: wenn du es in der scene machen willst, musst du ggf. eine klasse von QGraphicsView ableiten und das wheelEvent auch da ueberladen, oder einen eventFilter dafuer benutzen
mfg,
julian
-
-=Freaky=-
- Beiträge: 503
- Registriert: 29. Dezember 2006 22:54
- Wohnort: HL
-
-=Freaky=-
- Beiträge: 503
- Registriert: 29. Dezember 2006 22:54
- Wohnort: HL
ich habs gerade mal ausprobiert und es so hinbekommen:
vllt. hilft das, keine ahnung obs in dein konzept so reinpasst.
mfg,
julian
Code: Alles auswählen
MainWindow::MainWindow(QWidget *parent = 0)
: QMainWindow(parent)
{
m_graphicsView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_graphicsView->horizontalScrollBar()->installEventFilter(this);
m_graphicsView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_graphicsView->verticalScrollBar()->installEventFilter(this);
}
void MainWindow::wheelEvent(QWheelEvent *event)
{
if(event->modifiers() & Qt::ControlModifier)
{
int steps = event->delta() / (8 * 15);
qreal zoom = steps * 0.3;
m_graphicsView->scale(1.0 + zoom, 1.0 + zoom);
}
}
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if((obj == m_graphicsView->horizontalScrollBar() || obj == m_graphicsView->verticalScrollBar())
&& event->type() == QEvent::Wheel
&& reinterpret_cast<QWheelEvent*>(event)->modifiers() & Qt::ControlModifier) // um das wheelEvent nur dann zu filtern, wenn ich auch zoomen will
return true;
return false;
}mfg,
julian