Qt|QTreewidget类下函数qt助手详解说明示例(二)

时间:2024-07-15 07:03:38

上篇:Qt|QTreewidget类下函数qt助手详解说明示例(一)
该系列持续更新,喜欢请一键三连,一起学习进步,升职加薪,感谢各位大佬。
QT5.14.2 参考官方QT助手
Kimi辅助说明

文章目录

    • insertTopLevelItem / 在树控件的*项目列表中的指定位置插入一个新的`QTreeWidgetItem`
    • insertTopLevelItems / 树控件的*项目列表中的指定位置插入多个 `QTreeWidgetItem`
    • invisibleRootItem / 返回指向树控件的隐藏根项目的指针
    • isPersistentEditorOpen / 节点是否为可编辑状态
    • itemAbove / 不分层级获取上层相邻节点
    • itemAt / 根据坐标返回节点
    • itemAt / 同上直接输入坐标
    • itemBelow / 返回显示出的下层节点
    • itemWidget / 获取在特定项目和列交叉处的自定义小部件(`QWidget`)

insertTopLevelItem / 在树控件的*项目列表中的指定位置插入一个新的QTreeWidgetItem

在指定索引位置插入新的top节点void insertTopLevelItem(int index, QTreeWidgetItem *item)
在Qt框架中,QTreeWidget 类的 insertTopLevelItem 函数用于在树控件的*项目列表中的指定位置插入一个新的 QTreeWidgetItem

以下是 insertTopLevelItem 函数的详细说明:

  • 函数原型

    void insertTopLevelItem(int index, QTreeWidgetItem *item);
    
  • 参数

    • int index:指定要插入新项目的索引位置。索引从0开始。如果索引值大于*项目列表的长度,项目将被添加到列表的末尾。
    • QTreeWidgetItem *item:指向要插入的 QTreeWidgetItem 对象的指针。这个项目将成为 QTreeWidget 的一个*项目。
  • 功能:此函数将一个项目插入到 QTreeWidget 的*项目列表中的指定位置。如果插入的位置超出了当前*项目的数量,项目将被添加到*项目的末尾。

  • 使用场景:当你需要在树控件中动态添加新的*项目时,可以使用这个函数。这可以用于构建具有用户可定义结构的树形视图。

  • 示例代码

    QTreeWidget *treeWidget = new QTreeWidget;
    
    // 创建一个新的*项目
    QTreeWidgetItem *newItem = new QTreeWidgetItem;
    newItem->setText(0, "New Top Level Item");
    
    // 将新项目插入到*项目列表的开始位置
    treeWidget->insertTopLevelItem(0, newItem);
    

请注意,使用 insertTopLevelItem 函数插入的项目将成为 QTreeWidget 的子项目,并且 QTreeWidgetItem 的父指针将自动设置为 QTreeWidget。如果 item 已经是一个树中的项目,它将首先从原来的位置删除,然后插入到新的位置。如果 itemnullptr,这个函数将不执行任何操作。

insertTopLevelItems / 树控件的*项目列表中的指定位置插入多个 QTreeWidgetItem

插入多个top节点void insertTopLevelItems(int index, const QList<QTreeWidgetItem *> &items)
在这里插入图片描述
在Qt框架中,QTreeWidget 类的 insertTopLevelItems 函数允许你在树控件的*项目列表中的指定位置插入多个 QTreeWidgetItem 对象。

以下是 insertTopLevelItems 函数的详细说明:

  • 函数原型

    void insertTopLevelItems(int index, const QList<QTreeWidgetItem *> &items);
    
  • 参数

    • int index:指定要插入新项目的索引位置。索引从0开始。如果索引值等于或大于*项目列表的长度,项目列表将被添加到现有*项目的末尾。
    • const QList<QTreeWidgetItem *> &items:一个包含要插入的 QTreeWidgetItem 对象指针的列表。这些项目将成为 QTreeWidget 的*项目。
  • 功能:此函数将一系列项目插入到 QTreeWidget 的*项目列表中的指定位置。这些项目将按照列表中的顺序插入。

  • 使用场景:当你需要在树控件中批量添加新的*项目时,可以使用这个函数。这可以用于动态构建树形结构,例如从数据库或网络加载数据后填充树控件。

  • 示例代码

    QTreeWidget *treeWidget = new QTreeWidget;
    
    // 创建几个新的*项目
    QList<QTreeWidgetItem *> newItems;
    for (int i = 0; i < 3; ++i) {
        QTreeWidgetItem *newItem = new QTreeWidgetItem;
        newItem->setText(0, QString("New Top Level Item %1").arg(i + 1));
        newItems.append(newItem);
    }
    
    // 将新项目列表插入到*项目列表的开始位置
    treeWidget->insertTopLevelItems(0, newItems);
    

请注意,使用 insertTopLevelItems 函数插入的项目列表将成为 QTreeWidget 的子项目,并且 QTreeWidgetItem 对象的父指针将自动设置为 QTreeWidget。如果 items 列表为空,或者包含的项目已经在其他树结构中,这个函数将不执行任何操作。如果 items 中的项目已经是属于其他 QTreeWidget 的一部分,它们将从原来的位置删除,并插入到新的位置。

invisibleRootItem / 返回指向树控件的隐藏根项目的指针

递归访问所有根节点 返回一个模拟节点作为所有根节点的父节点QTreeWidgetItem *invisibleRootItem() const
在这里插入图片描述
在Qt框架中,QTreeWidget 类包含一个名为 invisibleRootItem() 的成员函数,它返回指向树控件的隐藏根项目的指针。在 QTreeWidget 中,隐藏的根项目是一个特殊的项目,它是所有*项目的父项目,但它本身不会显示在树视图中。

以下是 invisibleRootItem() 函数的详细说明:

  • 函数原型

    QTreeWidgetItem *invisibleRootItem() const;
    
  • 参数:此函数不接受任何参数。

  • 返回值:返回一个指向 QTreeWidgetItem 对象的指针,该对象代表 QTreeWidget 的隐藏根项目。如果树控件中没有项目,返回 nullptr

  • 功能:此函数允许你访问隐藏的根项目,这在需要对树控件的所有*项目进行遍历或操作时非常有用。

  • 使用场景:当你需要获取树控件中所有*项目的父项目,或者需要对树控件中的所有*项目执行操作时,可以使用这个函数。

  • 示例代码

    QTreeWidget *treeWidget = new QTreeWidget;
    
    // 获取隐藏的根项目
    QTreeWidgetItem *rootItem = treeWidget->invisibleRootItem();
    
    // 检查隐藏的根项目是否存在
    if (rootItem) {
        // 可以对隐藏的根项目执行操作,例如添加*项目
        QTreeWidgetItem *topLevelItem = new QTreeWidgetItem(rootItem);
        topLevelItem->setText(0, "Top Level Item");
    }
    

请注意,虽然隐藏的根项目是所有*项目的父项目,但它不会显示在用户界面中。这意味着用户不会直接与隐藏的根项目交互,但它可以作为一个方便的访问点,用于管理和操作树控件中的项目。

isPersistentEditorOpen / 节点是否为可编辑状态

节点是否为可编辑状态bool isPersistentEditorOpen(QTreeWidgetItem *item, int column = 0) const
在这里插入图片描述
在Qt框架中,QTreeWidget 类的 isPersistentEditorOpen 函数用于检查指定的树项目(QTreeWidgetItem)在特定列中的编辑器是否处于打开状态。

以下是 isPersistentEditorOpen 函数的详细说明:

  • 函数原型

    bool isPersistentEditorOpen(const QTreeWidgetItem *item, int column = 0) const;
    
  • 参数

    • const QTreeWidgetItem *item:指向要检查的 QTreeWidgetItem 对象的指针。
    • int column(可选,默认为0):指定要检查的列索引。如果设置为0,将检查项目的第一列。
  • 返回值:返回一个布尔值(bool),如果指定的树项目在指定列的编辑器处于打开状态,则返回 true;否则返回 false

  • 功能:此函数允许你确定用户是否正在编辑指定的树项目列。这在需要根据编辑器的状态执行特定操作时非常有用。

  • 使用场景:当你需要根据树项目是否正在被编辑来改变程序逻辑,例如,你可能需要在编辑器打开时禁用某些按钮或执行特定的用户界面更新。

  • 示例代码

    QTreeWidget *treeWidget = new QTreeWidget;
    
    // 假设treeWidget已经被填充了数据,并且某些项目正在被编辑
    
    // 获取当前选中的项目
    QTreeWidgetItem *selectedItem = treeWidget->currentItem();
    
    // 检查选中项目的第一列的编辑器是否打开
    bool isEditorOpen = treeWidget->isPersistentEditorOpen(selectedItem, 0);
    
    // 根据编辑器的状态执行操作
    if (isEditorOpen) {
        qDebug() << "Editor is open for the selected item.";
    } else {
        qDebug() << "Editor is closed or not being edited.";
    }
    

请注意,isPersistentEditorOpen 函数检查的是编辑器的打开状态,而不是项目是否被选中或可见。此外,如果项目或列索引无效,或者没有项目正在被编辑,函数将返回 false

itemAbove / 不分层级获取上层相邻节点

不分层级获取上层相邻节点QTreeWidgetItem *itemAbove(const QTreeWidgetItem *item) const
在这里插入图片描述
只能获取到展开节点,所以开始之前先调用expandAll(),否则获取到的为显示的相邻节点。
若没有显示出来的上层节点则返回空指针。

tree->expandAll();
QTreeWidgetItem* t1 = tree->itemAbove(root);
if (t1)
	qDebug() << t1->text(0);
t1 = tree->itemAbove(child1);
if (t1)
	qDebug() << t1->text(0);
t1 = tree->itemAbove(root1);
if (t1)
	qDebug() << t1->text(0);

在这里插入图片描述
在Qt框架中,QTreeWidgetItem 类的 itemAbove 函数用于获取在给定项目正上方的兄弟项目。如果给定的项目是其父项目的第一个子项,或者没有上方的兄弟项目,则返回 nullptr

以下是 itemAbove 函数的详细说明:

  • 函数原型

    QTreeWidgetItem *itemAbove(const QTreeWidgetItem *item) const;
    
  • 参数

    • const QTreeWidgetItem *item:指向要查找其上方兄弟项的 QTreeWidgetItem 对象的指针。
  • 返回值:返回一个 QTreeWidgetItem 指针,指向给定项目正上方的兄弟项目。如果没有上方的兄弟项目,返回 nullptr

  • 功能:此函数允许你查找并获取树形控件中给定项目的直接前一个兄弟项目,这在遍历项目或根据项目在树中的顺序执行操作时非常有用。

  • 使用场景:当你需要根据项目在树中的相对位置来获取或操作项目时,可以使用这个函数。

  • 示例代码

    QTreeWidget *treeWidget = new QTreeWidget;
    
    // 假设treeWidget已经被填充了数据,并且有多个*项目
    
    // 获取当前选中的项目
    QTreeWidgetItem *selectedItem = treeWidget->currentItem();
    
    // 如果选中的项目不是第一个*项目
    if (selectedItem && selectedItem->itemAbove()) {
        // 获取上方的兄弟项目
        QTreeWidgetItem *itemAbove = selectedItem->itemAbove();
        // 可以对上方的兄弟项目执行操作,例如选中它
        itemAbove->setSelected(true);
    } else {
        // 选中的项目可能是第一个项目或没有上方的兄弟项目
        qDebug() << "This is the first item or there's no item above.";
    }
    

请注意,itemAbove 函数只考虑直接的兄弟项目,不包括父项目或其他非兄弟关系的项目。如果给定的项目是*项目并且是第一个子项,或者给定的项目本身就是 nullptr,则此函数将返回 nullptr

itemAt / 根据坐标返回节点

根据坐标返回节点QTreeWidgetItem *itemAt(const QPoint &p) const
在这里插入图片描述
树形控件内部坐标,左上角为0,0点,如果对应坐标没有节点返回NULL

QPoint* p1 = new QPoint(0, 0);
QTreeWidgetItem* t1 = tree->itemAt(*p1);
if (t1)
	qDebug() << t1->text(0);
QPoint* p2 = new QPoint(0, 40);
t1 = tree->itemAt(*p2);
if (t1)
	qDebug() << t1->text(0);

在这里插入图片描述
在Qt框架中,QTreeWidgetItem 类并没有 itemAt 函数。相反,这是 QTreeWidget 类的一个成员函数,用于获取位于特定坐标点的项目。

以下是 QTreeWidget::itemAt 函数的详细说明:

  • 函数原型

    QTreeWidgetItem *itemAt(const QPoint &p) const;
    
  • 参数

    • const QPoint &p:指定的坐标点,表示在 QTreeWidget 坐标系中的位置。
  • 返回值:返回一个 QTreeWidgetItem 指针,指向包含该坐标点的项目。如果没有项目在该坐标点,返回 nullptr

  • 功能:此函数允许你确定哪个 QTreeWidgetItem 位于 QTreeWidget 中的特定坐标点。这在需要根据鼠标点击或其他输入事件获取项目信息时非常有用。

  • 使用场景:当你需要响应鼠标点击事件,或者需要找出用户界面上特定位置的项目时,可以使用这个函数。

  • 示例代码

    QTreeWidget *treeWidget = new QTreeWidget;
    
    // 假设treeWidget已经被填充了数据
    
    // 假设p是获取的鼠标点击位置
    QPoint p = QCursor::pos();
    QTreeWidgetItem *itemAtPoint = treeWidget->itemAt(p);
    
    if (itemAtPoint) {
        qDebug() << "Item at point:" << itemAtPoint->text(0);
    } else {
        qDebug() << "No item at this point.";
    }
    

请注意,itemAt 函数返回的项目是直接位于坐标点 p 下的项目,它不考虑项目之间的层级关系。如果坐标点在项目的子项目上,它将返回最底层的项目。此外,如果坐标点在两个项目的边界上,它将返回上面那个项目。

itemAt / 同上直接输入坐标

同上直接输入坐标QTreeWidgetItem *itemAt(int x, int y) const
在这里插入图片描述
同上:
在这里插入图片描述
QTreeWidgetItem *itemAt(int x, int y) constQTreeWidget 类的一个成员函数,它根据在树控件内的 x 和 y 坐标位置来获取对应的树项目(QTreeWidgetItem)。

以下是该函数的详细说明:

  • 函数原型

    QTreeWidgetItem *itemAt(int x, int y) const;
    
  • 参数

    • int x:x 坐标,表示在 QTreeWidget 内的横向位置。
    • int y:y 坐标,表示在 QTreeWidget 内的纵向位置。
  • 返回值:返回一个 QTreeWidgetItem 指针,指向包含指定坐标 (x, y) 的项目。如果没有项目在该坐标位置,或者坐标超出了控件的范围,则返回 nullptr

  • 功能:此函数允许你通过指定的坐标来获取树控件中的项目,这在处理鼠标事件或需要确定用户点击了哪个项目时非常有用。

  • 使用场景:当你需要根据用户点击的位置来获取树形控件中的项目,例如在响应鼠标点击事件时,可以使用这个函数。

  • 示例代码

    QTreeWidget *treeWidget = new QTreeWidget;
    
    // 假设treeWidget已经被填充了数据
    
    // 模拟用户点击的坐标位置
    int clickX = 100;
    int clickY = 50;
    QTreeWidgetItem *clickedItem = treeWidget->itemAt(clickX, clickY);
    
    if (clickedItem) {
        qDebug() << "Clicked on item with text:" << clickedItem->text(0);
    } else {
        qDebug() << "No item at the clicked position.";
    }
    

请注意,itemAt 函数直接根据坐标获取项目,不考虑项目之间的层级关系。如果坐标点在某个项目的文本或其他可视部分上,它将返回该项目。如果坐标点在两个项目的边界上,它将返回视觉上位于上方的项目。如果需要考虑层级关系或更复杂的点击检测逻辑,可能需要使用其他方法或信号。

itemBelow / 返回显示出的下层节点

返回显示出的下层节点QTreeWidgetItem *itemBelow(const QTreeWidgetItem *item) const
在这里插入图片描述
同itemAbove,只是取得下层节点,没有下层则返回空指针
在这里插入图片描述
在Qt框架中,QTreeWidgetItem 类本身并没有 itemBelow 函数。相反,这个函数是 QTreeWidget 类的成员函数,用于获取在给定项目正下方的兄弟项目。如果给定的项目是其父项目的最后一个子项,或者没有下方的兄弟项目,则返回 nullptr

以下是 QTreeWidget::itemBelow 函数的详细说明:

  • 函数原型

    QTreeWidgetItem *itemBelow(const QTreeWidgetItem *item) const;
    
  • 参数

    • const QTreeWidgetItem *item:指向要查找其下方兄弟项的 QTreeWidgetItem 对象的指针。
  • 返回值:返回一个 QTreeWidgetItem 指针,指向给定项目正下方的兄弟项目。如果没有下方的兄弟项目,返回 nullptr

  • 功能:此函数允许你查找并获取树形控件中给定项目的直接下一个兄弟项目,这在遍历项目或根据项目在树中的顺序执行操作时非常有用。

  • 使用场景:当你需要根据项目在树中的相对位置来获取或操作项目时,可以使用这个函数。

  • 示例代码

    QTreeWidget *treeWidget = new QTreeWidget;
    
    // 假设treeWidget已经被填充了数据,并且有多个项目
    
    // 获取当前选中的项目
    QTreeWidgetItem *selectedItem = treeWidget->currentItem();
    
    // 如果选中的项目不是最后一个项目
    if (selectedItem && treeWidget->itemBelow(selectedItem)) {
        // 获取下方的兄弟项目
        QTreeWidgetItem *itemBelow = treeWidget->itemBelow(selectedItem);
        // 可以对下方的兄弟项目执行操作,例如选中它
        itemBelow->setSelected(true);
    } else {
        // 选中的项目可能是最后一个项目或没有下方的兄弟项目
        qDebug() << "This is the last item or there's no item below.";
    }
    

请注意,itemBelow 函数只考虑直接的兄弟项目,不包括父项目或其他非兄弟关系的项目。如果给定的项目是*项目并且是最后一个子项,或者给定的项目本身就是 nullptr,则此函数将返回 nullptr

itemWidget / 获取在特定项目和列交叉处的自定义小部件(QWidget

QWidget *itemWidget(QTreeWidgetItem *item, int column) const
在这里插入图片描述
在Qt框架中,QTreeWidget 类的 itemWidget 函数用于获取在特定项目和列交叉处的自定义小部件(QWidget)。这个功能允许开发者在树控件的项目中放置自定义的小部件,而不是仅仅使用默认的文本标签。

以下是 itemWidget 函数的详细说明:

  • 函数原型

    QWidget *itemWidget(const QTreeWidgetItem *item, int column) const;
    
  • 参数

    • const QTreeWidgetItem *item:指向 QTreeWidgetItem 的指针,表示要查询的树项目。
    • int column:指定的列索引,表示要查询的列。
  • 返回值:返回一个 QWidget 指针,指向安装在指定项目和列交叉处的小部件。如果没有小部件被安装在该位置,返回 nullptr

  • 功能:此函数允许你访问在树项目中特定位置的自定义小部件。这在需要对这些小部件进行进一步操作或查询时非常有用。

  • 使用场景:当你在树控件的项目中使用了 setItemWidget 来放置自定义小部件,并且现在需要访问这些小部件时,可以使用 itemWidget 函数。

  • 示例代码

    QTreeWidget *treeWidget = new QTreeWidget;
    
    // 创建一个自定义的小部件,例如一个QPushButton
    QPushButton *myButton = new QPushButton("Click me");
    
    // 创建一个树项目并设置一些文本
    QTreeWidgetItem *myItem = new QTreeWidgetItem;
    myItem->setText(0, "Item with Button");
    
    // 将自定义小部件安装到树项目的特定列
    treeWidget->setItemWidget(myItem, 1, myButton); // 假设列索引1是我们要放置按钮的列
    
    // 稍后,如果你需要访问这个小部件
    QWidget *widget = treeWidget->itemWidget(myItem, 1);
    if (widget) {
        qDebug() << "Found widget:" << widget;
    }
    

请注意,itemWidget 函数返回的是安装在指定位置的小部件,如果没有小部件被安装在该位置,或者 itemcolumn 指定的位置无效,它将返回 nullptr。此外,column 参数是从0开始的索引,表示列的位置。