Hi,
erstmal Danke für die Hilfe! Mit den Stichworten bin ich in der Qt Dokumentation fündig geworden und konnte ein erstes Testprogramm erstellen. Eigentlich war ich sogar positiv überrascht: Ich brauchte nur ein "QStandardItemModel" mit Daten zu füllen und das ganze mit einem TreeView zu verbinden. Für das rudimentäre Inplace Editing brauchte ich noch nichteinmal ein eigenes Delegate!
Allerdings habe ich nun doch schwierigkeiten, das ganze an das bestimmte "Look&Feel" anzupassen:
1. Verhaltensweise der TreeView:
Wie oben schon berschrieben, sollen beim Editieren eines Items (während dem Inplace-Editing) auf bestimmte Aktionen reagiert werden: Beim bestätigen der Änderung mit Enter soll das Inplace-Editing in dieser Zeile beendet werden, und in der gleichen Spalte eine Zeile weiter das nächste Element editiert werden. Bzw. mit "Tab" soll in der gleichen Zeile die nächste Spalte aktiviert werden.
Meine Überlegungen das zu realisieren war bisher so: Die View müsste also auf Signale des Editors reagieren. Deshalb habe ich meine EditorFactory (siehe Problem weiter unten) etwas modifiziert:
Code: Alles auswählen
class CTagEditorFactory : public QItemEditorFactory
{
private: CMP3TagView *m_view;
public:
CTagEditorFactory(CMP3TagView *view);
virtual QWidget *createEditor(QVariant::Type type, QWidget * parent) const;
};
QWidget *CTagEditorFactory::createEditor(QVariant::Type type, QWidget * parent) const
{
QLineEdit *edit = new QLineEdit(parent);
QObject::connect(edit, SIGNAL( returnPressed() ), m_view, SLOT( ItemPressedEnter() ) );
return edit;
}
// Auszug aus Konstruktor von MP3TagView (abgeleitet von QTreeView)
QItemDelegate *delegate = new QItemDelegate;
CTagEditorFactory *factory = new CTagEditorFactory(this);
delegate->setItemEditorFactory(factory);
this->setItemDelegate(delegate);
Der definierte Slot ItemPressedEnter() wird aber scheinbar nie ausgeführt (die darin aufgerufene MessageBox bekomme ich zumindest mal nicht zu Gesicht). Aber wieso nicht? Bzw. wie könnte man das sonst lösen? Mein Testprogramm habe ich mal angehängt.
Zusazt: Hmm, ich habe gerade herausgefunden, dass wenn ich während dem Editing "Tab" drücke, die View eine Zeile weiter den Edit Modus betritt. Also eigentlich genau das Verhalten, was ich für "Enter" wünsche! Kann man das evtl. irgendwie ausnutzen?
2. Probleme mit dem Aussehen der View:
--> Ich finde die Zeilenhöhe der TreeView etwas zu klein. Zwischen den Zeilen hätte ich gerne etwas mehr Abstand. Wie könnte man das lösen?
--> Ich möchte wie in dem Screenshot einen einfachen Rahmen um den Editor haben. Mit dem Gedanken an diese schöne Rahmen-Tabelle der QFrame Klasse (
http://doc.trolltech.com/4.0/qframe.html) habe ich mich also durch die Doku gelesen, wie ich beim Inplace Editing an das QLineEdit Objekt komme. (Um die Eigenschafen des Widgets zu ändern.) Ziemlich bald habe ich dann die Klasse "QItemEditorFactory" entdeckt und eine eigene Factory abgeleitet, bei der ich in der "createEditor" Methode das LineEdit an meine Wünsche anpassen konnte. (siehe Codeauschnitt von oben.) Tja, und an dieser Stelle musste ich dann leider feststellen, das QLineEdit garnicht wie gedacht von QFrame abgeleitet wurde. Ich kann also lediglich mit QLineEdit::setFrame(bool) den 3D Rahmen ein- und ausschalten.
Wie aber bekomme ich einen einfachen 2D Rahmen (wie Box & Plain bei QFrame) um die LineEdit?
Ich habe auch schon versucht eine LineEdit mit einem QFrame als Parent zu erstellen. Oder eine Mehrfachvererbung von QFrame und QLineEdit auf ein neues Widget. Hat aber beides leider nicht funktioniert!
Wie könnte ich das ganze Lösen? Die Probleme mit dem Aussehen sind eigentlich zweitrangig (zur Not könnte man sich daran auch gewöhnen.). Aber das Verhalten sollte schon wie gewünscht funktionieren!
upsala hat geschrieben:Kennst du das:
Kid3
Tja, ich habe leider noch keinen Tag Editor für Linux gefunden, der so eine übersichtliche Tag Anzeige hat wie MP3Tag. Der Screenshot oben zeigt das ziemlich eindeutig: Ich habe alle Tags der Lieder des Ordners in einer Liste als übersicht. In vielen anderen TagEditoren sehe ich immer nur die Tags eines einzigen Liedes gleichzeitig.
TIA
CryptKeeper