C++ Qt-单击即可展开QTreeView?

C++ Qt-单击即可展开QTreeView?,c++,qt,mobile,qt4,C++,Qt,Mobile,Qt4,双击QTreeView的文本可展开子对象,但单击一次不会展开子对象。CSS中定义的图标(位于文本左侧)只需单击一下即可展开子项。如何使文本的一次单击(或触摸事件)就可以展开子对象 bookTreeView->setModel(standardModel); bookTreeView->setEditTriggers(QAbstractItemView::NoEditTriggers); bookTreeView->setWordWrap(true);

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

您是否尝试关闭双击扩展

bookTreeView->setExpandsOnDoubleClick(false);

类似于

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

单击的
信号可能不符合您的要求。您还可以查看
currentChanged
信号,这可能是您想要的。我从未在移动环境中使用过Qt:)

相同的Grund答案,但如果它已经打开,我会在单击时添加close

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)
在Visual Studio版本的Qt上测试。
单击即可打开和关闭的替代方法。
此方法不需要额外的函数,因为它使用lambda。
将其放入构造函数中运行。
注意:我将双击展开设置为false,因为从逻辑上讲,当一次单击展开时,两次单击将撤消第一次单击所做的展开。

该选项使流更加平滑和一致

请注意,这通常是不受欢迎的行为。通常情况下,选择视图而不展开视图更可取。我不确定为什么我认为移动应用程序不需要这样做-我不希望所有的子视图都在一次单击中展开,只希望与我单击的父视图相关的子视图展开。双击似乎与移动应用无关!是的,只需关闭双击扩展。这非常接近!单击父对象时,它将展开。但是,当我单击另一个父项时,它将通过我的自定义槽运行,该槽处理子项单击,而不显示子项。我要试一试。谢谢
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());
    }
});