2010-12-06 14 views
4

Während ein Doppelklick auf den Text eines QTreeView die untergeordneten Elemente erweitert, funktioniert ein einzelner Klick nicht. Das im CSS definierte Symbol (und links vom Text platziert) erweitert die untergeordneten Elemente jedoch um einen einzelnen Klick. Wie mache ich es so, dass ein einzelner Klick (oder Berührungsereignis) des Textes die Kinder erweitert?Qt - Erweitern Sie QTreeView mit einem einzigen Klick?

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

Nur eine Notiz, ist dies in der Regel unerwünschtes Verhalten. Die Möglichkeit, eine Ansicht auszuwählen, ohne dass sie erweitert wird, ist im Allgemeinen bevorzugt. – Falmarri

+0

Ich bin mir nicht sicher, warum ich es für eine mobile Anwendung unerwünscht finde - ich möchte nicht, dass alle Kinder mit einem einzigen Klick erweitert werden zu dem Elternteil, auf den ich geklickt habe. Doppelklick scheint für eine mobile App überflüssig zu sein! –

Antwort

8

Etwas nach dem Vorbild von

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

Das clicked Signal könnte nicht tun, was Sie wollen. Sie können sich auch das Signal currentChanged ansehen, was Sie vielleicht möchten. Ich habe nie Qt in einem mobilen Kontext verwendet :)

+0

das ist ziemlich nah! Wenn ich auf ein Elternelement klicke, wird es erweitert. Wenn ich jedoch per Mausklick auf ein anderes Elternelement klicke, wird es durch meinen benutzerdefinierten Slot geführt, der die Kinderklicks behandelt und die untergeordneten Elemente nicht anzeigt. Ich werde es ausprobieren. Vielen Dank! –

-1

Haben Sie versucht, Doppelklick-Erweiterung zu deaktivieren?

bookTreeView->setExpandsOnDoubleClick(false); 
+2

ja, nur Doppelklick-Erweiterung deaktiviert. –

3

Gleich Grund Antwort, aber ich füge schließen auf den Klick, wenn es bereits geöffnet.

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); 
} 

in mainwindow.h:

private slots: 
void expandItem(const QModelIndex &index) 
Verwandte Themen