我正在用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()和自定义插槽信号,但无法弄清楚如何检查已检查父级的子项。
任何建议都将受到赞赏。
答案 0 :(得分:1)
为QTreeView
的点击信号实施一个插槽,并确保使用addItens
在QStandardItem::setCheckable
功能中设置您想要检查的内容。
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);
}
}