c++ - QTreeView:如何在检查 parent 后检查 child

标签 c++ qt qtreeview

我正在使用 QtCreator 编写一个应用程序,并试图检查已检查父项的子项,但似乎无法找到正确的方法。

我这样设置模型:

MyClass::MyClass()
{
    QVBoxLayout *layout = new QVBoxLayout;

    setWindowTitle(tr("Menu"));
    m_model = new QStandardItemModel (this);

    addItems(m_model);

    m_view = new QTreeView;
    m_view->header()->hide();
    m_view->setModel(m_model);
    m_view->setContextMenuPolicy(Qt::CustomContextMenu);

    layout->addWidget(m_view);
    layout->setMargin(0);
    setLayout(layout);

    connect(m_view, SIGNAL(customContextMenuRequested(QPoint)),
             this, SLOT(contextMenuRequested(QPoint)));
}

我已经尝试使用信号 clicked() 和自定义插槽,但无法弄清楚如何检查已检查父项的子项。

如有任何建议,我们将不胜感激。

最佳答案

QTreeView 的点击信号实现一个​​插槽,并确保使用 QStandardItem::setCheckable< 在 addItens 函数中设置您想要检查的项目.

void MyClass::on_treeView_clicked(const QModelIndex &index) {
    QStandardItem* l_itemClicked = m_model->itemFromIndex(index);

    if (!l_itemClicked->rowCount()) return; // clicked item has no children

    for (int i = 0 ; i < l_itemClicked->rowCount() ; ++i) {
        QStandardItem* l_child = l_itemClicked->child(i);
        bool l_isChecked = l_child->checkState() == Qt::Checked;

        if (l_child->isCheckable())
            l_child->setCheckState(l_isChecked ? Qt::Unchecked : Qt::Checked);
    }
}

关于c++ - QTreeView:如何在检查 parent 后检查 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22790416/

相关文章:

python - 在 QTreeView 中用不同的图标显示文件夹/文件

c++ - MFC C++ : TODO <file description> has stopped working

c++ - 在 VM 中安全地运行 C++

c++ - Qt 中是否有与 MFC VERIFY() 等效的函数?

python - 来自文件内容的QImage

c++ - 拖动鼠标时QTreeView selectedIndex问题

c++ - 实现多类型算术运算符时如何解决 "template argument deduction/substitution failure"

c++ - 固定时间查找插入的数字

c++ - QThread QT3 的奇怪情况

QTreeView 删除所有项目的装饰/展开按钮