Comment cliquer sur l'image, la maintenir d'un coin, et redimensionner l'image dans le QTextEdit? Ou au moins comment obtenir une image sous le curseur/qui est sélectionné afin de changer la largeur et la hauteur?Comment redimensionner une image dans un QTextEdit?
Répondre
Voici comment je l'ai mis en œuvre:
void AdvancedTextEdit::resizeImage()
{
QTextBlock currentBlock = m_textEdit->textCursor().block();
QTextBlock::iterator it;
for (it = currentBlock.begin(); !(it.atEnd()); ++it)
{
QTextFragment fragment = it.fragment();
if (fragment.isValid())
{
if(fragment.charFormat().isImageFormat())
{
QTextImageFormat newImageFormat = fragment.charFormat().toImageFormat();
QPair<double, double> size = ResizeImageDialog::getNewSize(this, newImageFormat.width(), newImageFormat.height());
newImageFormat.setWidth(size.first);
newImageFormat.setHeight(size.second);
if (newImageFormat.isValid())
{
//QMessageBox::about(this, "Fragment", fragment.text());
//newImageFormat.setName(":/icons/text_bold.png");
QTextCursor helper = m_textEdit->textCursor();
helper.setPosition(fragment.position());
helper.setPosition(fragment.position() + fragment.length(),
QTextCursor::KeepAnchor);
helper.setCharFormat(newImageFormat);
}
}
}
}
}
Bien sûr, je l'ai mis en œuvre également getNewSize de la boîte de dialogue ResizeImageDialog (ce, newImageFormat.width(), newImageFormat.height()); fonction qui obtient la taille actuelle de l'image et permet à l'utilisateur de chnage la taille, et renvoie la nouvelle taille de l'image en tant que QPair. Ce n'est pas difficile à faire. Voir here pour la mise en œuvre de la boîte de dialogue.
Ce qui précède est une exigence assez courante, mais pas simple à mettre en œuvre dans Qt. Le cadre de redimensionnement d'une image dans un QTextEdit est la partie délicate. J'utilise une approche différente. Je dessine un widget au-dessus du QTextEdit comme un élastique autour de l'image. Pour ce faire, je l'ai fait ce qui suit:
J'ai mis en place un autre widget (héritant de QWidget) qui se dessine comme un cadre en pointillés. Lorsqu'elle est fournie à la bonne taille, elle se dessine comme une sélection élastique autour de l'image et vous fournira la nouvelle taille d'image, une fois que l'utilisateur a terminé de redimensionner l'élastique. Bien sûr, vous pouvez également redimensionner l'image lors du redimensionnement de la bande élastique si vous utilisez la fonction virtuelle resizeEvent (...) du widget élastique et que vous émettez votre propre signal. En tant que parent du widget élastique, définissez QTextEdi-> viewport() pour obtenir la position correcte de la fenêtre de votre widget élastique.
Créer une autre classe (MyTextEditDecorator) qui hérite simplement de QObject et installer lui-même comme un filtre d'événements pour l'QTextEdit et la fenêtre QTextEdit. Il fournira également une bonne isolation de la fonctionnalité élastique du reste du code que vous pourriez avoir déjà. Dans la fonction MyTextEditDecorator :: eventFilter (...), les événements MouseButtonPress, MouseButtonRelease, Paint et Resize sont interceptés. Afficher le widget élastique, lorsqu'un utilisateur clique dans une bordure d'image ou d'image, c'est-à-dire lorsque le format du curseur est QTextImageFormat et le cache lorsque le curseur de texte est en dehors d'un format d'image.
Si vous voulez que la sélection de bande de caoutchouc apparaisse lorsqu'un utilisateur déplace le curseur de texte via un clavier par exemple, vous pouvez accrocher à la QTextEdit :: cursorPositionChanged(). Pour mes besoins, j'ai également besoin des signaux currentCharFormatChanged() et textChanged() dans les cas où du texte est entré et qu'un format d'image est nouvellement créé. Vous aurez également besoin de trouver la position de l'image x, y dans la fenêtre pour positionner le widget élastique correctement autour de l'image. J'utilise le QTextEdit :: cursorRect (imageSelectedCursor). Si vous supportez différents alignements d'image, soyez prêt à l'ajuster aussi. Une autre fonction utile pour trouver les positions d'écran X, Y est QTextLayout :: lineForTextPosition (textCursor.position()) pour obtenir la bonne QTextLine et QTextLine :: rect(). Pour obtenir le redimensionnement de l'image avec de la bande de caoutchouc, il faut beaucoup d'efforts et lisez le guide ci-dessus. Je l'ai implémenté personnellement et cela fonctionne dans une application d'édition de texte professionnelle. Désolé de ne pas poster la solution complète ici. C'est long et a un droit d'auteur. J'espère que le guide ci-dessus aidera quelqu'un. J'ai testé plusieurs solutions, mais celle-ci est la seule qui offre un redimensionnement complet et encapsulé à l'intérieur de l'éditeur de bande de caoutchouc sans avoir à manipuler le code QTextEdit et les internes de la librairie Qt.
- 1. Comment redimensionner une image?
- 2. Comment redimensionner une image dans QLabel
- 3. comment redimensionner une image tout en enregistrant dans un dossier
- 4. Remplacer l'image par une autre dans QTextEdit
- 5. redimensionner une image sans UIScrollView
- 6. Comment redimensionner une image depuis Uri?
- 7. image Redimensionner dans asp.net
- 8. Comment redimensionner une image en C++?
- 9. Comment redimensionner une image avec jquery
- 10. Comment redimensionner une image pour l'adapter à Image :: Magick?
- 11. Comment redimensionner une image avec c/C++ dans Windows?
- 12. Comment redimensionner et positionner une image dans Crystal Reports
- 13. Javascript redimensionner le texte comme une image
- 14. Actualiser QTextEdit dans PyQt
- 15. Comment redimensionner une image à une taille de fichier spécifique?
- 16. Comment redimensionner et dessiner une image en utilisant wxpython?
- 17. Redimensionner une image monochrome en C#
- 18. Comment redimensionner une image lors du chargement en utilisant Zend_File_Transfer_Adapter_Http();
- 19. Comment redimensionner une image en utilisant PEAR PHP
- 20. Comment redimensionner une image pour l'impression sans dégrader la qualité?
- 21. multi Image: défiler comme redimensionner
- 22. Comment redimensionner et enregistrer une image sur l'iPhone?
- 23. Redimensionner une image en utilisant Javascript dans Opera Browser
- 24. jquery redimensionner image et rotator
- 25. Comment redimensionner un System.Windows.Forms.ToolBar?
- 26. CodeIgniter Image Manipulation (Redimensionner & Filigrane)
- 27. PHP Image Redimensionner/Relocaliser - Accélérer
- 28. redimensionner image jpeg en java
- 29. Redimensionner et faire glisser Image
- 30. redimensionner le contenu div + image sur le navigateur redimensionner