Ho sottoclasse QGraphicsView per un canvas personalizzato da utilizzare in un'applicazione CAD. Ho reimplementato con successo QGraphicsView :: wheelEvent per controllare i modificatori della tastiera per il tasto control e, se si preme il tasto control, per eseguire lo zoom. Sto cercando di implementare una scroll orizzontale quando l'utente tiene il turno e usa la ruota.qgraphicsview lo scrolling orizzontale ha sempre un delta verticale
Il problema che sto avendo è che lo scorrimento orizzontale anche sempre scorre verso l'alto di 0,279. Non è un problema enorme, ma estremamente fastidioso e indica che qualcos'altro è sbagliato.
Quindi, ecco le domande:
- E 'questo il modo giusto per implementare lo scorrimento orizzontale? Se no, che cos'è?
- Come eliminare questo delta di 0,279?
Grazie in anticipo. Codice e campione di uscita sotto
void myView::zoom(int delta)
{
double factor = pow(1.2, delta/abs(delta));
this->scale(factor, factor);
}
void myView::scrollHorizontal(int level)
{
QPointF center = mapToScene(viewport()->rect().center());
qDebug() << "center: " << center.x() << ", " << center.y();
centerOn(QPointF(center.x() - level, center.y()));
}
void myView::wheelEvent(QWheelEvent *event)
{
//qDebug() << "delta: " << event->delta();
if (event->modifiers() & Qt::ControlModifier)
{
this->zoom(event->delta());
}
else if (event->modifiers() & Qt::ShiftModifier)
{
this->scrollHorizontal(event->delta());
}
else
QGraphicsView::wheelEvent(event);
}
uscita campione dalla linea qDebug() in scrollHorizontal quando al bordo sinistro della scena:
center: 261.5 , 615.654
center: 261.5 , 615.375
center: 261.5 , 615.096
center: 261.5 , 614.817
center: 261.5 , 614.538
center: 261.5 , 614.259
center: 261.5 , 613.98
center: 261.5 , 613.701
center: 261.5 , 613.421
Questo è strano. Trovo che 'QGraphicsView' scorra un po '' innaturale 'quando raggiungi i limiti del rettangolo di scena, il comportamento è lo stesso indipendentemente da dove il rect visibile si trova nella scena rect? – cmannett85
Mentre sarebbe interessante sapere che cosa sta causando il problema, quello che stai facendo è piuttosto negativo dalla prospettiva [UX] (http://ux.stackexchange.com). Se qualcuno vuole uno scroll orizzontale, può semplicemente usare un dispositivo di input che lo ha implementato. Come tutti i trackpad recenti, mouse con padiglioni di scorrimento o multitouch, ecc. Presumibilmente, un utente CAD può permettersi un dispositivo di input decente e non è necessario offrire tali soluzioni alternative. –