我正在使用 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/