Qt - 单击即可扩展QTreeView?

时间:2010-12-06 21:16:58

标签: c++ qt mobile qt4

双击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 个答案:

答案 0 :(得分:8)

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

clicked信号可能无法执行您想要的操作。您还可以查看currentChanged信号,这可能是您想要的信号。我从未在移动环境中使用过Qt:)

答案 1 :(得分:3)

相同的 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);
}
主视窗中的

private slots:
void expandItem(const QModelIndex &index)

答案 2 :(得分:0)

您是否尝试关闭双击展开?

bookTreeView->setExpandsOnDoubleClick(false);

答案 3 :(得分:0)

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

在Visual Studio版本的Qt上进行了测试。
单击即可打开和关闭的替代方法。
此方法使用lambda,因此不需要其他功能。
将其放在您的构造函数中运行。
注意:我将双击的扩展设置为false,因为从逻辑上讲,当单击扩展时,单击两次将撤消第一个扩展。
该选项使流程更流畅,更一致。