自己练手的项目中,需要对多个不同层级的选项进行勾选操作,而想到简洁点的操作方式就是使用QTreeWidget进行布局与应用。这里简单介绍QTreeWidget的布局和勾选操作的应用。
项目要求:项目中需要有两个层级,A层级为大层级,B层级为小层级。当勾选A层级后,表示将B层级所有勾选,并且点击A层级,可展现所有B层级。

类似图中的效果,也就是可以勾选A,也可以通过A来展开显示B。
QTreeWidgetItem *inflateItem = new QTreeWidgetItem(ui->treeWidget);
inflateItem->setText(0, "A");
inflateItem->setCheckState(0, Qt::Unchecked);
for (int i = 1; i <= 12; ++i) {
QTreeWidgetItem *child = new QTreeWidgetItem(inflateItem);
child->setText(0, QString("B %1").arg(i));
child->setCheckState(0, Qt::Unchecked);
}QTreeWidgetItem *child = new QTreeWidgetItem(inflateItem);使用信号与槽操作,检查一个 QTreeWidgetItem 是否有子项,如果有子项,则调用 updateChildCheckState 函数来更新这些子项的勾选状态,使其与父项的勾选状态一致。
if (item->childCount() > 0) { // 如果是顶层节点
updateChildCheckState(item, item->checkState(column));
}这里是信号与槽的连接。
connect(ui->treeWidget, &QTreeWidget::itemChanged, this, &MainWindow::onItemChanged);QTreeWidget 控件中获取所有被勾选的顶级项和子项,并将它们的文本内容存储到一个 QStringList 中,最后通过一个消息框显示这些勾选的项。
QStringList checkedItems;
for (int i = 0; i < ui->treeWidget->topLevelItemCount(); ++i) {
QTreeWidgetItem *topItem = ui->treeWidget->topLevelItem(i);
if (topItem->checkState(0) == Qt::Checked) {
checkedItems.append(topItem->text(0));
}
for (int j = 0; j < topItem->childCount(); ++j) {
QTreeWidgetItem *childItem = topItem->child(j);
if (childItem->checkState(0) == Qt::Checked) {
checkedItems.append(" " + childItem->text(0)); // 添加缩进以区分层级
}
}
}
QMessageBox::information(nullptr, "勾选的项", checkedItems.join("\n"));这里简单介绍了项目对QTreeWidget的简单使用记录!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。