Archiv verlassen und diese Seite im Standarddesign anzeigen : QListbox->Anzeige von Pixmap usw.
toblinger
19-12-2004, 15:32
Hallo zusammen,
mein Problem besteht darin, dass ich eine Liste erstellen möchte, bei der jeder Eintrag folgendermaßen ausschaut: links ein Pixmap, rechts davon ein kurzer Text und das ganze ist umrandet von einem Rechteck.
Hierzu wollte ich QListBox verwenden, die ja ermöglicht, ein Pixmap gemeinsam mit einem Text anzuzeigen. Allerdings komm ich nicht drauf, wie dann die Anzeige des Rechtecks zu realisieren ist.
Oder wäre es vielleicht sogar besser, anstelle der QListBox eine QCanvasItemList zu verwenden. Allerdings müsste ich dann die Größe des Rechtecks (QRectangle) festlegen, welche jedoch dynamisch bleiben sollte, da ja die Liste in ein Mainwidget eingebettet ist und die Größe des Mainwidgets verändert wird.
Vielen Dank vorab,
Toblinger
anda_skoa
19-12-2004, 17:53
QCanvas ist dafür nicht gedacht.
Besser QListBox oder QListView
Mit einer eigenen Subklasse der Item Basisklasse oder einer der Subklassen (zum Beispiel die die schon Pixmap und Text kann) sollte das nicht so schwierig sein.
Die paint Methoden der Items erhalten meistens das zur Verfügung stehende Rechteck als Parameter.
Ciao,
_
toblinger
21-12-2004, 22:07
Hallo zusammen,
nach langem Überlegen habe ich nun das oben beschriebene Problem durch die Verwendung von QScrollView gelöst. Die Eintrage der Liste sind Objekte einer Klasse, die von QWidget erbt.
Jetzt stehe ich vor dem nächsten Problem, das mir nun schon einige Stunden Kopfzerbrechen bereitet:
Ich würde gerne die Einträge der QScrollView - Liste vertauschen können (ähnlich Drag and Drop). Mit contentsMousePressEvent und contentsMouseMoveEvent müsste es ja eigentlich klappen, dachte ich mir.
void Liste::contentsMousePressEvent (QMouseEvent *e)
{
if (event->button() == LeftButton)
pos = event->pos();
}
Was muss ich denn dem obigen Code hinzufügen, um zumindest zu erfahren, welches der eingefügten Widgets nun geklickt wurde? Wie könnte ich nun fortfahren, um endgültig Mausaktionen auf die Liste anzuwenden?
Vielen Dank vorab,
Toblinger
anda_skoa
22-12-2004, 12:56
Welche zusätzlichen Features brauchst du, die einen derartig drastischen Schritt nötig machen?
Deinem ersten Posting zufolge ginge es am leichtesten mit einer Subklasse von QListBoxPixmap oder QListViewItem im entsprechendem View.
Für den ListView spricht der dort schon vorhandene Drag&Drop Support.
Ciao,
_
toblinger
22-12-2004, 13:23
Hallo anda_skoa,
warum meinst Du, dass dieser Schritt drastisch wäre bzw. findest Du, dass ich einen falschen Weg einschlage?
Die Liste, an der ich gerade programmiere, stellt Einträge dar, welche zusätzlich in einer QPtrList abgelegt sind (und zwar in genau derselben Reihenfolge, wie sie in der Liste erscheinen). Wenn der Benutzer nun die Einträge mit der Maus verschiebt, so sollte sich die Reihenfolge in der QPrtList entsprechend verändern.
Um eben dies der QPtrList mitzuteilen, dachte ich, wäre es besser, Widgets in dem mit QScrollView gebildeten Fenster abzulegen, da man somit Zugriff auf die geometrischen Daten des Widgets hat. Dies würde mir ermöglichen, zu definieren: Wird das Widget um zwei Widget-Höhen verschoben, so setze es zwei Positionen weiter nach vorne in der QPtrList (wie das dann letztenendes programmiertechnisch umzusetzen ist, weiß ich noch nicht; ein erster Ansatz war eben die Auswahl von QScrollView).
Es kann auch sein, dass mein Ansatz kompletter Müll ist. Momentan bin ich eh ziemlich am Kämpfen mit QT. By the way: Wie findest Du "Das QT-Buch " von Harald Leipold(?). Dies werde ich mir heute nachmittag wahrscheinlich kaufen.
Grüsse,
Toblinger
Schon mal die Lesermeinungen auf Amazon.de gelesen?
Besser scheint mir da http://www.amazon.de/exec/obidos/ASIN/0131240722/qid=1103723541/sr=2-1/ref=sr_2_11_1/028-8531866-7700503 zu sein.
toblinger
22-12-2004, 14:06
Das gibt es doch zum Downloaden. Der Link steht irgendwo hier im Forum. Trotzdem danke für den Vorschlag.
Allerdings habe ich mir gerade "Das QT-Buch" gekauft. Der Autor ist Helmut Herold und nicht Harald Leipold, wie oben geschrieben.
Der Grund, warum ich mir dieses Buch gekauft habe, liegt darin, dass viele unkommentierte QT-Beispiele in dem Buch erklärt sind. Ob es 50 Euro wert ist, wird sich rausstellen. Beim Kaufen hatte ich schon ein schlechtes Gewissen, da ich mir normalerweise Bücher immer ausleihe.
Grüsse,
Toblinger
anda_skoa
22-12-2004, 20:51
warum meinst Du, dass dieser Schritt drastisch wäre bzw. findest Du, dass ich einen falschen Weg einschlage?
Eine eigene QScrollView Subklasse zu machen anstatt eine der vorhandenen zu benutzen, ist ziemlich viel Arbeit.
Da muss man schon einen guten Grund haben, damit sich der Aufwand lohnt.
QListView unterstützt ansich das Drag&Drop der Items (siehe QListViewItem::setDragEnabled(bool))
(unter der Annahme, dass da eine reine Qt Anwendung und keine KDE Anwendung ist)
QListViewItem::paintCell sollte auch leicht so zu überschreiben sein, dass es einen Rahmen zeichnet.
Wenn das für deine Zwecke nicht reicht, könntest du eventuell mit einer QCanvas ein schnelleres Resultat erzielen als dein momentaner Ansatz.
Ciao,
_
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.