QWhatsThis::add() für QListViewItems

Alles rund um die Programmierung mit Qt
Antworten
Stevie
Beiträge: 4
Registriert: 22. November 2004 09:26

QWhatsThis::add() für QListViewItems

Beitrag von Stevie »

Hallo QExperts,

ich versuche meinen abgeleiteten QListViewItems einen WhatsThis Text anzuheften, der beim Anklicken im WhatsThis Modus eine Beschreibung anzeigt. Blöderweise ist QListViewItem kein QWidget, sodass die ganz einfache Methode schon mal wegfällt. Der Versuch, den Text bei activate() anzuzeigen, wenn der WhatsThis Modus aktiv ist, schlägt bei mir bislang fehl, weil ich nicht herausbekomme, wann dieser Modus aktiv ist. Selbst die Abfrage auf den WhatsThis-Cursor hilft nicht, da der bei activate() schon wieder zurückgesetzt wurde. Momentan behelfe ich mir mit der rechten Maustaste, doch das ist nur ein 'work around'. Hat jemand eine Idee?

Gruß, Stevie
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Beitrag von ArneStocker »

Hallo Stevie

Ich reagiere für die Bubble Help (QToolTip) auf die Nachricht onItem(QListViewItem*). Das sieht dann so aus

Code: Alles auswählen

connect (ListView,SIGNAL(onItem(QListViewItem*),this,SLOT(OnItem(QListViewItem*)));

void MeineKlasse::OnItem(QListViewItem *pItem)
{
	QToolTip::remove(ListView->viewport());
	QToolTip::hide(); 
	if (pItem != NULL)
	{
		QToolTip::add(ListView->viewport(),"blabla");
	}
}
wobei ich sämtliche ListViewItems abgeleitet habe, so dass Sie weitere Informationen (Zeiger auf andere Objekte) enthalten. Wenn das mit QWhatsThis nicht funktioniere will, kannst Du ja mal probieren auf die Nachricht pressed(QListViewItem*) zu reagieren.

Teil doch mal mit, ob es so klappt

Gruss Arne
Stevie
Beiträge: 4
Registriert: 22. November 2004 09:26

ListViewItem-Hilfe im "What's This" Modus

Beitrag von Stevie »

Hallo Arne,

erstmal Danke, dass Du Dich mit der Sache beschäftigt hast.

Dein Vorschlag geht auch. Ist so ähnlich wie meine Variante mit der rechten Maustaste bloß ohne click.

// callback functions for GUI actions
connect(myListView,
SIGNAL( rightButtonPressed (QListViewItem *, const QPoint &, int) ),
this,
SLOT( displayItemInfo(QListViewItem *, const QPoint &) ));

Was ich aber möchte ist, nur im "What's This" Mode (Fragezeichencursor) eines Dialogs auf die Aktion zu reagieren. Ich finde jedoch keinen Weg, diesen Status abzufragen, wenn ich mit dem Fragezeichencursor auf das ListViewItem drücke bzw. gehe.

Ich bräuchte etwas wie: bool myListView::isInWhatsThisMode (void);
bzw. noch toller: QWhatsThis::add(myListViewItem, "ItemHelp")

Gruß, Stevie
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Beitrag von ArneStocker »

Hi Stevie

wie wärs mit

Code: Alles auswählen

void MyClass::OnItem(QListViewItem *pItem)
{
	if (pItem != NULL) 
	{
		QMyListViewItem  *pMyItem = (QMyListViewItem*) pItem;
		if (QWhatsThis::isInWhatsThisMode() == true)
		{
			QWhatsThis::add(ListView->viewport(), pMyItem->GetWhatsThisText());
			... hier ...
		}
	}
}
... mit GetWhatsThisText() als angenommener Methode des abgeleiteten ListViewItems (Annahme : Alle ListViewItems im ListView sind vom Typ QMyListViewItem)

Wenn ich die Frage richtig verstanden habe, wolltest Du doch wissen wann sich der Zeiger im WhatsThisMode über irgendeinem Item befindet ? Das ist bei ... hier ... der Fall

Gruss Arne
Stevie
Beiträge: 4
Registriert: 22. November 2004 09:26

Beitrag von Stevie »

Moin Arne,

So wie ich das verstanden habe, ist die statisch Methode
QWhatsThis::inWhatsThisMode() dazu da, selbst anzumelden,
dass man sich im What's This Modus befindet. Das ist in der
Regel nach enterWhatsThisMode() der Fall, wenn man
customWhatsThis() überlädt und 'true' zurückliefert.

Ich habe aber den Standard "What's This" Button des QDialogs
und kan den Dialog nicht abfragen, ob er gerade im "What's This"
Modus ist, da ich nicht weiß wie. Ich bräuchte etwas wie
myDialog->isInWhatsThisMode(). Deshalb habe ich schon probiert
den Zeigertyp abzufragen, allerdings ohne Erfolg.

Gruß und Dank,

Stevie
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Beitrag von ArneStocker »

.. Ok, jetzt hab' ich es bei meinen Items ausprobiert. Man kann schon fragen, ob sich die Applikation im WhatsThis - Modus befindet, es scheitert m.E: aber daran, dass in diesem Modus kein OnItem() Signal gesendet wird und die Methode onItem deshalb gar nicht aufgerufen wird. Dann kann sie natürlich auch nicht fragen :roll:

Es gibt jedoch ein Beispiel in examples/helpsystem in dem das Problem (mit den Zellinhalten von QTable) gelöst wurde. Es ist wohl nicht so, dass einen die Lösung geradezu anspringt, aber ich habe mir das Beispiel kompiliert und es scheint zu funktionieren, d.h. für jede einzelne Zelle (oder z.B. auch Spalte im Header) gibt es verschiedene individuelle Texte, abhängig vom Inhalt

Vielleicht hilft das weiter

Gruss Arne
Stevie
Beiträge: 4
Registriert: 22. November 2004 09:26

Beitrag von Stevie »

Vielen Dank für Deine Unterstützung Arne,

das Beispiel in examples/helpsystem hatte ich übersehen.

Gruß, Stevie
Antworten