Comment créer un délégué pour QTreeWidget?
Voici ce que je suis en train de faire (tous les parents et les enfants doivent avoir un près bouton sur la droite, dans l'avenir, que le planait article sera en mesure de montrer l' **fermer ** bouton):
Mon délégué 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 );
};
Avec QTreeWidget
code de connexion:
recipientsView()->setItemDelegateForColumn( 1, new CloseButton( this ) );
où recipientsView()
est un simple QTreeWidget
.
Problème est que QToolButton
s ne sont pas visibles (il doit être dans la deuxième colonne, c'est à dire un index de colonne dans l'arborescence de la 1
). Ce que je fais mal?
J'ai déjà contrôlé tous les Qt démo exemples sur les délégués et les premiers résultats sur Google à propos de QItemDelegate
's et les trucs similaires.
source d'informationauteur mosg
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le
QStyledDelegate::paint
fonction pour dessiner l'icône de fermeture, sans l'aide de n'importe quel widget, et laeditorEvent
pour recevoir les événements de la souris pour l'article, même si vous n'utilisez pas l'éditeur ou de faire le point modifiable.Tout d'abord, je dois vous demander si vous êtes vraiment à l'aide d'un QTreeWidget, ou plutôt un QTreeView? Vous ne pouvez pas utiliser des délégués avec un QTreeWidget selon la documentation de QTreeView, et devra utiliser un QTree*Vue* et une certaine forme de QAbstractItemModel pour vous d'être en mesure d'utiliser un délégué personnalisé.
Ah, scratch. Je vois que vous êtes d'appel setItemDelegateForColumn, qui est un QTreeView fonction, mais vous devez être conscient de la différence, donc je vais garder le paragraphe ci-dessus. 🙂
Je voudrais vérifier que votre modèle flags() fonction est de retour Qt::ItemIsEditable dans le cadre de son élément de drapeaux. Le createEditor() la méthode est appelée à chaque fois qu'une édition de l'événement est rapporté par la vue. (Le point de vue des événements qui vont déclencher une modification dépendent du modèle EditTriggers), Généralement un double-clic sur le délégué va déclencher un edit par défaut, entre autres choses.
Je doute que vous souhaitez sur le bouton fermer pour ne figurer que sur le double-clic, cependant. Pour que le bouton apparaisse tout le temps, vous aurez à remettre sur pied le délégué de la peinture de fonction() pour dessiner un bouton, Entre autres choses. J'ai trouvé de Qt StarDelegate exemple être très utile à cet égard, et je soupçonne que vous trouverez utile.
Vous pouvez utiliser un QItemDelegate avec un QTreeWidget de cette manière (par exemple en PyQt, désolé):