Multicolor tooltip in Qt
Asked Answered
A

1

6

I want to have moveable multicolor tooltip for QGraphicsItems. For example when I click on graphicsItem in scene, tooltip appears, then during dragging mouse tooltip should follow cursor. I can implement movable tooltip with standard QToolTip, but seems Qt support only 1 color for whole tooltip. Also QToolTip doesn't have paintEvent, so I decide to create ColoredTooltip class inherited from QTextEdit, but problem appears when I show at first time ColoredTooltip object. It began to grab mouse events, which is not ok for me, because I can't catch mouseMove events for graphics scene and move coloredTooltip. How can I solve that problem?

Armour answered 22/4, 2013 at 11:36 Comment(12)
Did you mean "multiple colors on same tooltip"? Do you want to change the color or do you want to "texturize" the tool tip?Vernievernier
No, I can change color for whole tooltip, but I want to have at least 3 colors in single tooltip.Armour
And how should they appear? As a linear gradient? Did you try the brush as in my answer? I didn't test it, so I don't know if that one works.Vernievernier
Ah wait... If you mean the text color, then you most probably want to color words. You can use HTML in a tool tip.Vernievernier
Html not work in standard tooltip.Armour
HTML works for me, see my other answer. Please try that one.Vernievernier
I use QToolTip::showText and html not work. Since graphicsItems created and deleted all the time of scrolling scene, I not set tooltip for items, I show tooltip text in cursor current position.Armour
So you don't want to try my solution? It works, I even attached a screenshot. I also don't see how you move this tool tip with the mouse while showing when using the static showTextVernievernier
So I need to use setToolTip instead of QToolTip::showText?Armour
Just try it, then we'll see how the performance is. I mean, it's one line of code, isn't it?Vernievernier
No, I made some change in design for trying your solution :) First time it not work, but after removing /t /n from tooltip text if works! Thanks a lot!Armour
Oh, I see. Note that once the text contains HTML tags, Qt parses it as HTML (they call it "rich text"). In HTML, whitespace characters like \n and \t are ignored. Use <br/> for line breaks. For tabs, I don't know of any such replacement. Usually, one uses CSS to do this, but this might be some overkill here (I also remember having some troubles with padding in Qt CSS). Maybe use good old and ugly spaces for this &nbsp;&nbsp;&nbsp;&nbsp;Vernievernier
V
11

To color single words (or any part of a text) use Qt's tiny HTML subset supported by its rich text engine. The <font> tag and the attribute color= are supported. QToolTip supports rich text.

This one works for me:

toolTip.setText("foo <font color=\"red\">bar</font>");

To use any RGB color (not only known names), use the hex-notation:

toolTip.setText("foo <font color=\"#ff0000\">bar</font>");

Image showing a tool tip where one word is colored in red

Note that unless you need to move the tool tip while being shown or want to set additional properties, you can simply use QGraphicsItem::setToolTip.

Vernievernier answered 22/4, 2013 at 12:3 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.