Seite 1 von 1

Stylesheet für QToolTip

Verfasst: 6. November 2018 10:59
von Nukleus
Hallo,

ich habe eine Applikation mit einer Anzahl Tabellen entwickelt, die ich von QTableView / QTreeView abgeleitet habe.
Die zugehörigen Daten stammen aus einer MySql-Datenbank.
Die einzelne Tabelle ist in der Regel so vollgepackt, daß ich keine zusätzliche Spalte mehr darin unterbringen kann.

Gelegentlich brauche ich dennoch eine (bestimmte) Zusatzinformation aus der Datenbank zu einer Tabellenzeile. Ich habe mir gedacht, dies über ein ToolTip zu lösen. D.h. Rechtsklick auf eine Tabellenzeile, das Signal "customContextMenuRequested" abfangen, im zugehörigen Slot die entsprechende Information aus der Datenbank holen und als ToolTip darstellen. Das funktioniert auch.

Aber: Der hochkommende ToolTip sieht total bescheuert aus. Schwarzer Hintergrund, weißer Text und die Lage des Tooltips könnte ich mir auch ein wenig besser vorstellen. (Screenshot kann ich leider nicht liefern, weil ich dazu die rechte Maustaste loslassen muß und dann ist der ToolTip weg).

Für optische Parameter der übrigen Klassen verwende ich fast ausschließlich Stylesheets, weil das für mich die einfachste Art ist, optische Parameter an persönlichen Geschmack anzupassen. Das würde ich jetzt auch gerne für den ToolTip so machen.

In der Dokumentation zu Stylesheets steht in der Liste der styleable Widgets auch QToolTip. In der Klasse QToolTip ist aber der Konstruktor privat, d.h. ich kann keine Instanz vom Typ QToolTip anlegen. Das bräuchte ich aber, um ein Sytesheet darauf loslassen zu können. Wie kommt man da weiter?

Für kleine Hinweise wäre ich sehr dankbar.

Re: Stylesheet für QToolTip

Verfasst: 6. November 2018 22:05
von Christian81
Man kann das Stylesheet doch auch global definieren - QApplication::setStyleSheet()

Re: Stylesheet für QToolTip

Verfasst: 7. November 2018 11:55
von Nukleus
... ja, das kann man und ich habe (u.a.) auch ein globales Stylesheet. Das hilft hier aber nichts.

Momentan nutze ich die Funktion QWidget::setToolTip(QString). Was die Funktion im Hintergrund dann zur Anzeige aufbaut, ist mir unbekannt. Jedenfalls wird alles ignoriert, was ich in den Stylesheets stehen habe. (Für QWidget setze ich natürlich den Zeiger auf meine TableView auf). Was da bei Rechtsklick hochkommt, sieht eben nicht so aus, wie ich es mir vorstelle, und was genau da hochkommt (Label?, Edit?, Widget?, Frame?) , weiß ich nicht.

Ich weiß nicht, was ich mit der Klasse QToolTip anfangen kann, die ich eigentlich bräuchte. Ich kann keine Instanz anlegen, keine Klasse anlegen, die von QToolTip erbt.

Mit negativem Ausgang habe ich schon probiert: QToolTip, QLabel, QLineEdit im Stylesheet definiert, einfach mal den Hintergrund dieser Elemente auf Orange gesetzt, um zu sehen, ob sich überhaupt was ändert. Das war nie der Fall.

Ich habe dann auch noch versucht, die Funktion QToolTip::setPalette zu benutzen, indem ich Textfarbe und Hintergrund aus einem Label des Widgets auslese und an die Palette übergebe. Auch da ändert sich am Aussehen des ToolTips nichts.

Re: Stylesheet für QToolTip

Verfasst: 8. November 2018 20:11
von Christian81
Ist es ein 'automatischer' Tooltip oder mittels QToolTip::showText() ?
Intern wird ein QLabel benutzt.

Re: Stylesheet für QToolTip

Verfasst: 9. November 2018 10:14
von Nukleus
Ist es ein 'automatischer' Tooltip oder mittels QToolTip::showText() ?
... das ist eigentlich egal. Die Methoden QWidget->setToolTip und QToolTip::setText verhalten sich in dieser Frage gleich.

Hier ist der Code dazu, den ich gegenwärtig zur Anzeige verwende. Der Weg über QToolTip versprach zumindest die Möglichkeit, Vordergrund und Hintergrund der Anzeige zu parametrisieren, wenn schon das Stylesheet nicht zuschlägt.

Code: Alles auswählen

       palette.setBrush(QPalette::Window,                              /*                                              */
             fktHeaderLabel()->palette().brush(QPalette::Window));      /* Übernehme Background                         */
        palette.setBrush(QPalette::WindowText,                          /*                                              */
             fktHeaderLabel()->palette().brush(QPalette::WindowText));  /* Übernehme Vordergrund                        */
        QToolTip::setPalette(palette);                                  /* und setze die Palette                        */
        QToolTip::showText(clickPoint,text);                            /* und gebe Text aus                             */
Ich habe beschlossen, den Weg über QToolTip aufzugeben. Die Funktion QToolTip::setPalette hat keine Auswirkungen auf das Aussehen des ToolTips. Der Texthintergrund sollte orange (er ist aber schwarz), der Text selbst dazu grau (er ist aber weiß) sein.

Inzwischen habe ich im Parent der betreffenden TableView einen EventFilter für TableView->viewport eingerichtet und fange darin die Maus-Ereignisse rechts press und rechts release raus. Ich hätte natürlich auch eine Klasse schreiben können, die von TableView erbt und dort die Methode event überlagern. Letzteres wäre nur mehr Aufwand gewesen.

Ich werde dann ein QLabel zur Anzeige verwenden, dieses wird mit Sicherheit das betreffende Stylesheet berücksichtigen. Dazuhin kann ich die Anzeige exakt da platzieren, wo ich sie haben will.

Den Thread hier schließe ich. Vielen Dank für die Antworten an Christian81. Nachdem es andere Möglichkeiten zum gewollten Ergebnis gibt, glaube ich, daß das Thema nicht wichtig genug ist, um einen bestimmten Weg zum Laufen zu bekommen.