Seite 1 von 1
QPushButton in einem QTableView
Verfasst: 22. Juni 2009 11:19
von BartSimpson
Hallo habe habe folgendes vor,
in einem QTableView, soll in einer Spalte ein QPushButton erscheinen.
Hierzu habe ich dem View auf der passenden Spalte ein Delegate verpasst.
Nur habe ich folgende Probleme:
- der QPushButton wird nur bei einem Doppelklick angezeigt.(er soll immer sichtbar sein)
- Wenn der QPushButton gedrückt wird, brauche ich eine Referenz zum Datenmodell??
Ich habe in der Doku openPersistentEditor gefunden, nur leider ist die Anzahl der Zeilen Dynamisch, so das man nicht einfach eine Schleife durchlaufen lassen kann. Genauer gesagt soll man mit dem QPushButton die Zeile löschen können in der er sich befindet.
Hat jemand ein paar Ideen hierfür?
Verfasst: 22. Juni 2009 11:49
von franzf
Evtl. ist ja eine Alternative, dass du dir eine eigene QHeaderView implementierst?
Verfasst: 22. Juni 2009 11:57
von BartSimpson
Der hilft ja nicht wirklich weiter, da man nicht an die einzelnen Zellen kommt um dort die Schaltfläche zu platzieren.
Verfasst: 22. Juni 2009 12:03
von archer
Sieh die mal die Dokumentation von QAbstractItemDelegate an. Was dort mit einer ProgressBar gezeigt wird, müsstes du mit dem Button (QStyleOptionButton) machen.
Über createEditor kannst du dann z.B. einen Dialog anzeigen.
Nur mit der Anzeige des Button-Srtatus, Sunken oder Raised, kann ich nicht weiterhelfen, habe ich auch noch nicht hinbekommen.
Verfasst: 22. Juni 2009 13:06
von BartSimpson
Genau die Paint Methode musste noch überschrieben werden:)
damit geht das ganz gut.
Code: Alles auswählen
QStyleOptionButton sf;
sf.rect=option.rect;
sf.features=QStyleOptionButton::None;
sf.text=trUtf8("löschen");
sf.state=QStyle::State_Enabled|QStyle::State_Raised;
QApplication::style()->drawControl(QStyle::CE_PushButton,&sf,maler);
Das erzeugt ein normalen PushButton.
Die Übergabe an das Modell wurde wie folgt gelöst::
Code: Alles auswählen
Der Slot in den gehüpft wird, wenn jemand daraufklickt:
QPushButton *sf=qobject_cast<QPushButton *>(sender());
sf->setProperty("weg",true);
emit commitData(sf);
emit closeEditor(sf);
setModelData:
QPushButton *sf = static_cast<QPushButton*>(editor);
modell->setData(index,sf->property("weg"));
jetzt muss ich das nur noch hinbekommen, das man da einfach drauf klicken kann. Bisher muss man erst mal ein Doppelkick machen um den Editor zu aktivieren.

Verfasst: 22. Juni 2009 13:17
von franzf
BartSimpson hat geschrieben:Der hilft ja nicht wirklich weiter, da man nicht an die einzelnen Zellen kommt um dort die Schaltfläche zu platzieren.
Desalb
BartSimpson hat geschrieben:Genauer gesagt soll man mit dem QPushButton die Zeile löschen können in der er sich befindet.
hatte ich den Gedanken, dass du anstatt eine extra Zelle für den PushButton reservierst, ein kleines Icon in die verticalHeaderView legst.
Aber wenn es jetzt eh funktioniert, ist es ja OK

Verfasst: 22. Juni 2009 14:36
von BartSimpson
Achso:)
Mein Problem ist im Moment das man den 3 mal anklicken muss::(
1. und das Feld auszuwählen.
2. Damit der Editormodus losgeht
3. Um den Knopf zudrücken..
Eigentlich wollte ich das so haben, das man nur drauf drückt und fertig.
Verfasst: 22. Juni 2009 17:41
von upsala
Hast du schon mal probiert, ob man damit Mouse-Press/Release-Events empfangen kann?
Code: Alles auswählen
bool QAbstractItemDelegate::editorEvent ( QEvent * event, QAbstractItemModel * model, const QStyleOptionViewItem & option, const QModelIndex & index )