Utiliser le presse-papiers avec Qt

Formation

En Ligne

Prix sur demande

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Description

  • Typologie

    Formation

  • Méthodologie

    En ligne

Grâce à cette formation vous pourrez acquérir les connaissances nécessaires qui vous permettrons d’ajouter des compétences à votre profil et obtenir de solides aptitude qui vous offriront de nombreuses opportunités professionnelles.

Questions / Réponses

Ajoutez votre question

Nos conseillers et autres utilisateurs pourront vous répondre

À qui souhaitez-vous addresser votre question?

Saisissez vos coordonnées pour recevoir une réponse

Nous ne publierons que votre nom et votre question

Les Avis

Le programme

Introduction du cours

La bibliothèque Qt est très utile et surtout très complète. Elle renferme plusieurs classes intéressantes, comme la classe QClipboard. Aujourd'hui, je vais vous montrer comment utiliser cette classe dans ce petit tutoriel. Avant d'aller plus loin, vous devez connaître la bibliothèque Qt et savoir comment faire des fenêtres avec celle-ci.

Le clipboard est très utile lorsqu'on veut stocker, déplacer ou dupliquer des données comme des images, des textes, etc. Dans certaines de vos applications, il est fort probable que vous ayez besoin de manipuler les données dans le presse-papiers. Maintenant, je vais vous montrer comment cela fonctionne. Alors commençons ! :D

Clipboard veut dire presse-papiers en anglais.

Manipuler les données du clipboardLes textes

La manipulation des données du presse-papiers est très simple avec Qt. Le bout de code qui suit stocke le texte contenu dans le clipboard dans un QString :

QClipboard *pressePapiers = QApplication::clipboard(); QString textePressePapiers = pressePapiers->text();

Maintenant, analysons les deux lignes ci-dessus l'une après l'autre.

QClipboard *pressePapiers = QApplication::clipboard();

La méthode statique clipboard() de la classe QApplication retourne un pointeur vers le presse-papiers de l'application.

QString textePressePapiers = pressePapiers->text();

La méthode text() de la classe QClipboard retourne le texte contenu dans le presse-papiers. Si vous vous rappelez le tutoriel sur Qt de M@teo21 et Nanoc, vous devriez connaître la syntaxe des accesseurs et des mutateurs avec Qt. La méthode text() est un accesseur, donc le mutateur qui change le texte contenu dans le clipboard est setText(QString text).

La méthode setText(QString text) prend une QString comme argument, celle-ci est bien évidemment le texte qui va être mis dans le presse-papiers.

Oui, mais tu as dit qu'on pouvait stocker plusieurs types de données, comme des images... Ce n'est que du texte, ça !

Patience, patience. J'allais justement répondre à votre question. ;)

Les images

Pour les images, c'est la même chose que pour le texte — sauf le nom des méthodes bien sûr. :p Mais avec Qt et le clipboard, il y a deux types d'images : le QImage et le QPixmap.

Quelle est la différence entre les deux ?

La différence, c'est que QImage est une classe qui permet un accès direct aux données des pixels de l'image, donc elle est spécialement conçue pour être peinte. Tandis que la classe QPixmap est conçue pour être affichée. Lorsque vous voulez afficher une image rapidement, utilisez QPixmap ; quand vous voulez faire des retouches sur l'image, utilisez QImage.

Comme je l'ai dit plus haut, seuls les noms et les types d'arguments diffèrent avec les images. Ce qui donne pour les accesseurs :

image() //Retourne QImage. pixmap() //Retourne QPixmap.

Et pour les mutateurs :

setImage(QImage image) setPixmap(QPixmap pixmap)

C'est simple, non ? ^^ Il y a aussi une méthode pour vider le contenu du presse-papiers : la méthode clear(). Elle est très facile à utiliser.

pressePapiers->clear(); //Vide le presse-papiers Les données MIME

Dans cette sous-partie, nous allons aborder les données MIME.

Mime... Ce n'est pas une sorte de clown ?!

Bien sûr que non ! MIME est l’acronyme de Multipurpose Internet Mail Extensions.

Citation : http://fr.wikipedia.org/wiki/Multipurpose_Internet_Mail_Extensions

« Multipurpose Internet Mail Extensions (MIME) est un standard internet qui étend le format de données des courriels pour supporter des textes en différents codages de caractères autres que l'ASCII, des contenus non textuels, des contenus multiples, et des informations d'en-tête en d'autres codages que l'ASCII. »

Bref, il s'agit d'un format de données polyvalent. La classe qui contient les données MIME dans Qt est QMimeData. Le presse-papiers peut retourner un pointeur sur le QMimeData de celui-ci. Rien de plus simple :

QMimeData *mimeData = pressePapiers->mimeData();

Voilà ! :)

C'est bien beau tout ça, mais on est supposé faire quoi avec les données MIME ? o_O

Avec ces données, on peut facilement savoir si le clipboard contient du texte en format HTML, des hyperliens ou même une couleur ! Pour savoir cela, la classe QMimeData renferme de précieux testeurs. Ces testeurs retournent true si le QMimeData contient ce qu'ils testent, sinon ils retournent false.

hasText() //Pour savoir s'il contient du texte. hasHtml() //Pour savoir s'il contient du HTML. hasUrls() //Pour savoir s'il contient des hyperliens. hasImage() //Pour savoir s'il contient une image. hasColor() //Pour savoir s'il contient une couleur.

Ils sont très faciles à utiliser. Rien de mieux qu'un exemple pour démontrer leur utilité.

QClipboard *pressePapiers = QApplication::clipboard(); QMimeData *mimeData = pressePapiers->mimeData(); if(mimeData->hasText()) { qDebug() << "Texte"; } else if(mimeData->hasHtml()) { qDebug() << "HTML"; } else if(mimeData->hasUrls()) { qDebug() << "Hyperliens"; } else if(mimeData->hasImage()) { qDebug() << "Image"; } else if(mimeData->hasColor()) { qDebug() << "Couleur"; } else { qDebug() << "Données inconnues!"; }

Il y a les testeurs, mais il y a aussi les accesseurs et les mutateurs. Voici un exemple avec le format HTML et texte seulement :

QClipboard *pressePapiers = QApplication::clipboard(); QMimeData *mimeData = pressePapiers->mimeData(); if(mimeData->hasHtml()) { textEdit->setPlainText(mimeData->text()); //Met le texte contenu dans le presse-papiers dans le QTextEdit. } else if(mimeData->hasText()) { textEdit->setHtml(mimeData->html()); //Met le html contenu dans le presse-papiers dans le QTextEdit. }

Pour les couleurs et les images c'est un peu différent, car il faut faire des casts.

QClipboard *pressePapiers = QApplication::clipboard(); QMimeData *mimeData = pressePapiers->mimeData(); if(mimeData->hasImage()) { QPixmap image = qvariant_cast<QPixmal>(mimeData->imageData()); //Continuer avec l'image obtenue ! } else if(mimeData->hasColor()) { QColor couleur = qvariant_cast<QColor>(mimeData->colorData()); //Continuer avec la couleur obtenue ! }

Comme vous pouvez le constater, les données MIME sont très utiles quand il faut s'occuper du presse-papiers.

Les signaux du presse-papiers

La classe QClipboard renferme quelques signaux, mais un seul est intéressant à mon avis : le signal dataChanged. Dans cette sous-partie, je vais vous expliquer son fonctionnement.

Quand je regarde dans la documentation de la classe QClipboard, il y a quatre signaux. Pourquoi tu nous en expliques juste un ?!

La réponse est simple. Le signal findBufferChanged est seulement pour Mac OSX, et le signal selectionChanged pour les systèmes d'exploitation qui supportent les sélections (comme X11). Or Mac OSX et Windows ne supportent pas les sélections. Si ces signaux vous intéressent, vous pouvez lire la documentation. :D

dataChanged

Ce signal est vraiment simple à comprendre et à utiliser ! Il est émis lorsque les données du presse-papiers sont changées. Comme dans les autres sous-parties, je vais commencer par un exemple.

QObject::connect(pressePapiers, SIGNAL(dataChanged()), this, SLOT(pressePapiersChanger())); .... //Un peu plus loin dans le code. void pressePapiersChanger() { qDebug() << "Les données du clipboard ont changé!"; }

Si vous ne comprenez pas cela, je vous conseille de lire les sous-parties précédentes du tutoriel et le chapitre sur les signaux et les slots du tutoriel de M@teo21 et Nanoc.

Ainsi se termine mon mini-tutoriel sur le presse-papiers avec la bibliothèque Qt. Ce n'était pas très difficile à comprendre, mais si vous avez des questions auxquelles la documentation ne répond pas, n'hésitez pas à les poser.

  • #
Waouh !

Très heureux de voir que nos cours vous plaisent, déjà 3 pages lues aujourd'hui ! Vous pouvez continuer la lecture de nos cours en devenant un Roomie, un membre de la communauté d'OpenClassrooms. C'est gratuit !

Vous pourrez aussi suivre votre avancement dans le cours, faire les exercices et discuter avec les autres Roomies.

S'inscrire Se connecter
  • Thématiques du cours : Programmation Qt

Chaque cours est créé par un professeur ou un expert dans le domaine. Il est composé d'une ou plusieurs parties et peut comporter du texte, des images (schéma, illustration) et des vidéos. Chaque partie d'un cours certifiant est ponctuée d'exercices de 2 types : Des quiz corrigés automatiquement Des devoirs libres (exemple : créer un site web avec des consignes précises). Ces devoirs sont évalués par les pairs. Chaque devoir est corrigé 3 fois par 3 autres élèves, dans un processus en double aveugle, selon un barème fixé par le professeur. La note finale est la moyenne des 3 notes reçues sur le devoir. 50% des devoirs corrigés par les pairs obtiennent quasiment les 3 mêmes notes, avec une variance inférieure à 1. La recherche académique montre d'ailleurs que l'évaluation par les pairs peut être aussi précise que celle des professeurs.

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Utiliser le presse-papiers avec Qt

Prix sur demande