Wie erstellen Delegierter für QTreeWidget?
Hier ist, was ich versuche zu tun (alle Eltern und Kinder müssen eine schließen - Taste auf der rechten Seite, in der Zukunft, nur das betreffende Element wird in der Lage sein zu zeigen, die **close * * - Taste):
Meine Stellvertretung-code:
class CloseButton : public QItemDelegate
{
Q_OBJECT
public:
CloseButton( QObject* parent = 0 )
: QItemDelegate( parent )
{};
QWidget* createEditor( QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index ) const
{
if ( index.column() == 1 )
{
QToolButton* button = new QToolButton( parent );
button->setIcon( QIcon( CLOSE_ICON ) );
//button->setFixedSize( 16, 16 );
//button->setAutoRaise( true );
//button->setVisible( true );
CONNECT( button, SIGNAL( clicked() ), this, SLOT( emitCommitData() ) );
return button;
}
return ( new QWidget );
}
private slots:
void emitCommitData()
{
emit commitData( qobject_cast< QWidget* >( sender() ) );
}
private:
//Q_DISABLE_COPY( CloseButton );
};
Mit QTreeWidget
Anschluss code:
recipientsView()->setItemDelegateForColumn( 1, new CloseButton( this ) );
wo recipientsView()
ist eine einfache QTreeWidget
.
Problem ist, dass QToolButton
s werden nicht angezeigt (es muss in der zweiten Spalte, also Spalte index in der Struktur ist 1
). Was mache ich falsch?
Habe ich schon geprüft alle Qt-demo-Beispiele über die Delegierten und die ersten Google-Ergebnis über QItemDelegate
's und ähnlichen Kram.
InformationsquelleAutor der Frage mosg | 2011-08-24
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die
QStyledDelegate::paint
Funktion zu zeichnen, das Symbol schließen, ohne Verwendung von widgets und dieeditorEvent
zu erhalten Maus-Ereignisse für das Element, selbst wenn Sie nicht, verwenden Sie den editor oder das Element bearbeitet werden.InformationsquelleAutor der Antwort alexisdm
Zuerst sollte ich Fragen, wenn Sie wirklich mit einem QTreeWidget, oder eher ein QTreeView? Sie können nicht verwenden Sie benutzerdefinierte Teilnehmer mit einem QTreeWidget gemäß der Dokumentation für QTreeView, und der Einsatz eines QTree*Anzeigen* und irgendeine form von QAbstractItemModel für Sie nutzen zu können einen benutzerdefinierten Delegaten.
Ah, scratch, dass. Ich sehe, dass Sie anruft setItemDelegateForColumn, das ist ein QTreeView Funktion, aber Sie sollten sich bewusst sein, der Unterschied, so halte ich den obigen Absatz. 🙂
Ich würde überprüfen, dass Ihr Modell ist flags() Funktion zurückgibt Qt::ItemIsEditable als Teil der Artikel-flags. Die createEditor () - Methode wird immer aufgerufen, wenn ein Ereignis Bearbeiten, berichtet der Blick. (Die Ereignisse, die ausgelöst wird ein edit-hängt vom Modell EditTriggers) in der Regel ein Doppelklick auf den der Delegat ausgelöst Bearbeiten standardmäßig, unter anderem.
Ich bezweifle, dass Sie möchten, dass die Schaltfläche "schließen" wird nur angezeigt, doppelklicken Sie auf, wenn. Um die Taste zu erscheinen, müssen Sie implementieren die Delegierten paint () - Funktion zeichnen Sie eine Schaltfläche, Unter anderem. Ich fand Qt StarDelegate Beispiel sehr hilfreich sein in dieser Hinsicht, und ich vermute, Sie finden es nützlich, zu.
InformationsquelleAutor der Antwort Jonathan Thomas
Können Sie eine QItemDelegate mit einem QTreeWidget diese Weise (etwa in PyQt, sorry):
InformationsquelleAutor der Antwort Hunter