Projet

Général

Profil

Prise en main TBI

Code source:

bzr branch sftp://redmine.ryxeo.com//home/groupes/developpeurs/abuledu/abuledu-tablette/vncviewer-1.0/

Cahier des charges:

  • icône quitter (déjà la)
  • icône paramètres -> permet d'entrer l'ip de la cible
  • zoom

Problème de curseur souris sous Win32

Lors de la prise en main du bureau, le curseur de la souris disparaissait...
Résolution :
VncView::showDotCursor(VncView::CursorOn);

L'énumération passée en paramètre à d'autres états :
  • CursorOff -> là on a plus de souris
  • CursorAuto -> c'est l'implémentation par défaut (pas sûr), mais pas de souris non plus...

Mise à l'échelle de la vue VNC

Tests et prise en main réalisés avec TightVNC Server tournant sur XP 32 bits.

L'objet VNC retourne 2 tailles :
  • framebufferSize() -> qui correspond à la taille de l'écran cible (ici le windows)
  • frameSize() -> qui correspond à la taille du client VNC dans la Mainwindow

Afin de rendre le redimensionnement à l'échelle, il fallait juste le lui demander :

RemoteView::enableScaling(true);

A partir de là, greffe du resizeEvent() de la mainwindow sur la fonction qui permet de retailler la taille du client VNC

scaleResize(largeurMainWindow, hauteurMainWindow)
updatesEnabled()

L'implémentation du zoom et du centrage de la fenêtre à l'air plus compliqué...
Idée n°1 : utiliser une QGraphicsScene...
A suivre !

En écrivant cette documentation, je voyais passer des lignes et des mots dans la console Qt...
Ces qDebugs sont des qStrings qui représentent les mots que je surligne sur le wiki... Ça doit-être l'implémentation du copier-coller de la lib VNC... Enoooorme !

20121114 : encore quelques problèmes de mise à l'échelle mais ça avance !

Implémentation Zoom & Rotation

Afin de pouvoir gérer ces 2 besoins, il a fallu passer par une QGraphicsScene + QGraphicsView + QGraphicsProxyWidget...
Important : l'objet vncView ne doit pas avoir de parent, sinon il ne passe pas dans le proxy !

v = new VncView(0, QUrl("vnc://"+ipCible), mdp); // parent = 0 :)
scene = new QGraphicsScene(this);
proxy = new QGraphicsProxyWidget();
proxy->setWidget(v);  // on passe par un proxy car vncview n'est pas un QGraphicsItem
scene->addItem(proxy);
ui->graphicsView->setScene(scene);

Le zoom se fait grâce à un QSlider vertical, et la rotation avec un QSlider horizontal.
Ceci permet d'avoir un zoom et une rotation plus fluide (la première implémentation avec des boutons n'était pas satisfaisante).

Paramétrage ip cible et mot de passe

Le choix n'est pas encore fixé. Mais pour avancer, le constructeur vncView prend désormais 3 paramètres :

VncView::VncView(QWidget *parent, const KUrl &url, const QString &password)

Donc, dans l'ordre :
  • un parent
  • une url, qui correspond à l'adresse ip de la cible
  • un password, qui correspond au mot de passe de la cible

Les deux derniers sont en const, car il ne doivent pas être modifié pendant l'exécution.
D'ailleurs, il faudrait que chaque getter soit en const, afin d'avoir une sécurité en plus :).

Choix d'implémentation en vrac :
  • QSetting
  • Boite de dialogue (ip + mdp)
  • ...
Redmine Appliance - Powered by TurnKey Linux