2017-07-18 1 views
0

J'essaie d'utiliser la méthode/fonction scale (qreal x, qreal y) pour la vue Graphics afin de mettre à l'échelle une pixmap dans le widget de visualisation graphique. Ci-dessous, j'ai joint le code de mes tentatives. Quand j'exécute le programme, il affiche ma pixmap mais dès que je déplace le curseur horizontal, le pixmap disparaît et la vue graphique affiche simplement une page blanche vierge. Les parties commentées sont toutes des choses que j'ai essayées mais qui ont produit le même résultat. Je ne suis pas entièrement sûr que si la mise à l'échelle de la vue graphique met tout à l'échelle dans la vue graphique, je l'ai supposé, mais je n'ai rien trouvé de concret dans la documentation.Mise à l'échelle du widget GraphicsView avec curseurs lors de l'affichage d'un Pixmap

* Une chose à noter est que j'ai un bouton qui affiche deux Pixmaps différents, même après que je suis présenté avec l'écran blanc en déplaçant la barre de défilement, si j'appuie sur le bouton il mettra à jour la barre de défilement (comme un pixmap est légèrement plus grand que le graphique widget de) mais une vue graphique blanc blanc est toujours affichée

* PixMapView est le nom du graphisme Voir le widget

void CanvasTest::on_horizontalSlider_valueChanged(int value) 
{ 
    //int scaleX = value/(ui->horizontalSlider->maximum())*2; 
    //Graph is updating and Y scroll bar is updating to show for it 
    //int scaleY = ui->verticalSlider->value(); 
    QGraphicsScene* scene = ui->PixMapView->scene(); 
    ui->PixMapView->scale(value/10, 1); 

    ui->PixMapView->setScene(scene); 
    ui->PixMapView->show(); 
} 

Répondre

0

Il y avait problème de troncature en utilisant des nombres entiers, ce code utilise également des variables statiques pour garder une trace des valeurs d'échelle précédentes.

static float valueTracker = 1;\ 
static float valueTracker1 = 1; 
static int count = 1; 

bool order; 
if (count%2 == 1) 
{ 
    valueTracker = newSliderValue; 
    order = 0; 
} 
else 
{ 
    valueTracker1 = newSliderValue; 
    order = 1; 
} 
if(valueTracker == valueTracker1 || valueTracker == 0 || valueTracker1 == 0) 
{ 
    count++; 
    return; 
} 
else if(order == 0) 
{ 
    ui->PixMapView->scale(((valueTracker/valueTracker1)), 1); 
} 

else if(order == 1) 
{ 
    ui->PixMapView->scale(((valueTracker1/valueTracker)), 1); 
} 

count++;