QTreeView:检查父母后如何检查孩子
QTreeView: How to check children after checking parent
我正在使用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
函数中设置您想要检查的 itens。
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);
}
}
相关文章:
- valgrind-hellgrind与泄漏检查的结果不同
- C++模板来检查友元函数的存在
- 检查输入是否不是整数或数字
- 试图让变量检查数组中的某些内容
- 检查值是否在集合p1和p2中,但不在p3中
- C++概念:如何使用'concept'检查模板化结构的属性?
- 概念TS检查忽略私有访问修饰符
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 如何在C++中检查2D数组中负值的输入验证
- C++:正在检查LinkedList中的回文-递归方法-错误
- 使用for循环检查数组中的重复项
- 如何检查一个c++字符串中有多少相同的字符/数字
- 检查不带转换的扫描格式
- 如何检查线程是否锁定
- 清除前检查矢量
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- C++LDAP检查用户是否是特定组的成员
- 我如何循环循环switch语句检查重新检查char?(C )
- Visual Studio - 如何从 C++ 核心指南检查器检查路径中排除文件夹