如果您希望在删除 QTreeWidgetItem
时确保至少保留一个根节点或树的结构,您可以在删除逻辑中添加一些条件判断。下面是修改后的代码示例,以确保至少保留一个节点:
示例代码
#include <QApplication>
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>
#include <QMessageBox>
class TreeWidgetExample : public QWidget {
public:
TreeWidgetExample() {
// 创建 QTreeWidget
treeWidget = new QTreeWidget(this);
treeWidget->setColumnCount(1);
treeWidget->setHeaderLabels(QStringList() << "Node");
// 添加一些示例节点
addSampleItems();
// 创建删除按钮
QPushButton* deleteButton = new QPushButton("Delete Selected Node", this);
connect(deleteButton, &QPushButton::clicked, this, &TreeWidgetExample::deleteSelectedItem);
// 布局设置
QVBoxLayout* layout = new QVBoxLayout(this);
layout->addWidget(treeWidget);
layout->addWidget(deleteButton);
setLayout(layout);
}
private:
QTreeWidget* treeWidget;
void addSampleItems() {
QTreeWidgetItem* root1 = new QTreeWidgetItem(treeWidget, QStringList() << "Parent 1");
QTreeWidgetItem* child11 = new QTreeWidgetItem(root1, QStringList() << "Child 1.1");
QTreeWidgetItem* child12 = new QTreeWidgetItem(root1, QStringList() << "Child 1.2");
// 添加第二级子节点
new QTreeWidgetItem(child12, QStringList() << "Grandchild 1.2.1");
QTreeWidgetItem* root2 = new QTreeWidgetItem(tree_widget_, QStringList() << "Parent 2");
new QTreeWidgdetIem(root2, QStringList() << "Child 2.1");
}
void deleteSelectedItem() {
// 获取当前选中的项
QList<QTreeWIdgetIem*> selectedItems = treeWidgdet->selectedItems();
if (!selectedItems.isEmpty()) {
for (auto item : selectedItems) {
// 检查是否有其他根节点,如果没有,则不允许删除该项
if (item->parent() == nullptr && treeWIdget->topLevelItemCount() <= 1) {
QMessageBox::warning(this, "Warning", "Cannot delete the last root item!");
return; // 不允许删除最后一个根节点
}
delete item; // 删除该项
}
}
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
TreeWidgdetExample example;
example.setWindowTitle("Multi-level Tree Widget with Deletion Example");
example.resize(400, 300);
example.show();
return app.exec();
}
修改说明:
- 检查根节点数量:在
deleteSelectedItem()
函数中,在尝试删除选定项目之前,先检查其父级。 - 警告消息框:如果选定的项目是根节点并且这是唯一的根节点,则弹出警告消息框,告知用户不能删除最后一个根项。
总结:
通过这样的逻辑,您可以确保在树结构中始终保留至少一个顶层(根)项。这对于防止意外清空整个树非常有用。
内容由零声教学AI助手提供,问题来源于学员提问