2010-12-06 31 views
4

Tout en double-cliquant sur le texte d'un QTreeView développe les enfants, un simple clic ne le fait pas. L'icône définie dans le CSS (et placée à gauche du texte) étend cependant les enfants en un seul clic. Comment puis-je faire un simple clic (ou un événement tactile) du texte pour développer les enfants?Qt - Développez QTreeView en un seul clic?

bookTreeView->setModel(standardModel); 
    bookTreeView->setEditTriggers(QAbstractItemView::NoEditTriggers); 
    bookTreeView->setWordWrap(true); 
    bookTreeView->sizeHint(); 
    //bookTreeView->mousePressEvent(QMouseEvent()); 
    bookTreeView->setTextElideMode(Qt::ElideNone); 
    bookTreeView->setExpandsOnDoubleClick(true); 
    bookTreeView->setUniformRowHeights(true); 
    bookTreeView->setHeaderHidden(true); 
    bookTreeView->setStyleSheet("QTreeView { font-size: 27px; show-decoration-selected: 0; } QTreeView::branch:has-siblings:!adjoins-item { border-image: none; } QTreeView::branch:has-siblings:adjoins-item { border-image: none; } QTreeView::branch:!has-children:!has-siblings:adjoins-item { border-image: none;} QTreeView::branch:has-children:!has-siblings:closed, QTreeView::branch:closed:has-children:has-siblings { border-image: none; image: url(':images/images/right_arrow.png'); } QTreeView::branch:open:has-children:!has-siblings, QTreeView::branch:open:has-children:has-siblings { border-image: none; image: url(':images/images/down_arrow.png'); } "); 
+0

Juste une note, cela est généralement un comportement indésirable. Etre capable de sélectionner une vue sans l'agrandir est généralement préféré – Falmarri

+0

Je ne sais pas pourquoi je vois que ce n'est pas souhaitable pour une application mobile - je ne veux pas que tous les enfants soient développés en un seul clic, juste ceux liés au parent j'ai cliqué. le double-clic semble étranger à une application mobile! –

Répondre

8

Quelque chose le long des lignes de

QObject::connect(
    tree, SIGNAL(clicked(const QModelIndex &)), 
    tree, SLOT(expand(const QModelIndex &)) 
); 

Le signal clicked pourrait ne pas faire ce que vous voulez. Vous pouvez également regarder le signal currentChanged, qui pourrait être ce que vous voulez. Je n'ai jamais utilisé Qt dans un contexte mobile :)

+0

c'est assez proche! Lorsque je clique sur un parent, il se développe. Lorsque je clique sur un autre parent, il parcourt mon emplacement personnalisé qui gère les clics des enfants et n'affiche pas les enfants. Je vais y aller. Merci! –

-1

Avez-vous essayé de désactiver l'expansion par double clic?

bookTreeView->setExpandsOnDoubleClick(false); 
+2

Oui, il suffit de désactiver l'expansion en double-clic. –

3

Même Grund réponse, mais j'ajoute close sur le clic s'il est déjà ouvert.

QObject::connect(
    tree, SIGNAL(clicked(const QModelIndex &)), 
    this, SLOT(expandItem(const QModelIndex &)) 
); 

void MainWindow::expandItem(const QModelIndex &index) 
{ 
    tree->isExpanded(index)? tree->collapse(index) : tree->expand(index); 
} 

dans mainwindow.h:

private slots: 
void expandItem(const QModelIndex &index)