Qt - Развернуть QTreeView одним щелчком мыши? - PullRequest
5 голосов
/ 07 декабря 2010

В то время как двойной щелчок по тексту QTreeView расширяет дочерние элементы, один щелчок - нет. Значок, определенный в CSS (и расположенный слева от текста), расширяет дочерние элементы одним щелчком мыши. Как сделать так, чтобы один щелчок (или событие касания) текста расширил дочерние элементы?

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

Ответы [ 4 ]

8 голосов
/ 07 декабря 2010

Что-то вроде

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

Сигнал clicked может не выполнять то, что вы хотите.Вы также можете посмотреть на сигнал currentChanged, который может быть тем, что вы хотите.Я никогда не использовал Qt в мобильном контексте:)

3 голосов
/ 02 декабря 2015

То же самое Grund ответ, но я добавляю закрыть по клику, если он уже открыт.

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

в mainwindow.h:

private slots:
void expandItem(const QModelIndex &index)
0 голосов
/ 20 февраля 2019
ui.tree_view->setExpandsOnDoubleClick(false);
QObject::connect(ui.tree_view, &QTreeView::clicked, [this]() {
    if (ui.tree_view->isExpanded(ui.tree_view->currentIndex())) {
        ui.tree_view->collapse(ui.tree_view->currentIndex());
    }else{
        ui.tree_view->expand(ui.tree_view->currentIndex());
    }
});

Протестировано на версии Qt для Visual Studio.
Альтернативный метод, который открывается и закрывается одним щелчком мыши.
Этот метод не требует дополнительных функций, так как используетлямбда.
Поместите это в свой конструктор для запуска.
примечание: я устанавливаю раскрытие при двойном щелчке на false, потому что по логике, когда расширяется один щелчок, два щелчка отменят развертывание, которое сделал первый.делает поток более плавным и последовательным.

0 голосов
/ 07 декабря 2010

Вы пытались отключить расширение двойного щелчка?

bookTreeView->setExpandsOnDoubleClick(false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...