【问题标题】:Intermixed parent and child nodes using QTreeWidget (Qt4) and drag'n'drop使用 QTreeWidget (Qt4) 和拖放混合父节点和子节点
【发布时间】:2011-07-16 09:59:53
【问题描述】:

我正在使用 QTreeWidget 来显示父节点树及其休假 节点。每个父节点可以有不同的叶子节点,但叶子节点不应该有 孩子们。用户应该能够通过拖动来在父母之间移动树叶 到新的位置。为了避免叶子掉到其他叶子上,我有 只在叶子上设置ItemIsDragEnabled,同时在ItemIsDropEnabled上设置 父节点。如果 QTreeWidget 设置为“SingleSelection”,这可以正常工作。 但是,如果 SelectionMode 设置为 ExtendedSelection 您可以 一起选择叶子和父节点并将它们都放在叶子上:http://i.stack.imgur.com/Kil3y.jpg(屏幕截图)

这里是示例代码:

QTreeWidget *tree = this->ui->treeWidget;
QTreeWidgetItem *item;
QTreeWidgetItem *child;
tree->setSelectionMode(QAbstractItemView::ExtendedSelection);
tree->setDefaultDropAction(Qt::MoveAction);
tree->setDragEnabled(true);
tree->setAcceptDrops(true);
tree->setDropIndicatorShown(true);

// disable dropping of leaves as top level items
tree->invisibleRootItem()->setFlags( Qt::ItemIsSelectable |
                Qt::ItemIsUserCheckable | Qt::ItemIsEnabled );

for (int i = 0; i < 2; i++) {
    // create top level item
    item = new QTreeWidgetItem();
    item->setText(0, "parent");
    item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable
                  | Qt::ItemIsDropEnabled | Qt::ItemIsEnabled );

    // add 3 child items
    for (int j = 0; j < 3; j++) {
        child = new QTreeWidgetItem();
        child->setText(0, "child");
        child->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable
                      | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled );
        item->addChild(child);
    }

    // add item to tree
    tree->addTopLevelItem(item);
}

我用谷歌搜索了很多,但找不到解决方案。如何在使用ExtendedSelection 时将子节点和父节点保持在各自的级别?

我必须这样做吗 子类 QTreeWidget 并覆盖 insertRows()?有什么方法可以拦截 在 QTreeWidget 上拖放操作,以便我可以检查操作是否正常? (如果 有一种方法可以让它与 QStandardItemModel/QTreeView 我会 也很开心)

【问题讨论】:

    标签: qt drag-and-drop qtreewidget


    【解决方案1】:

    一个简单的解决方法是将一个小函数连接到信号itemSelectionChanged,该信号从选择中删除与最后一个选定项目不同类型的所有项目。非常适合我(以及魔兽争霸 3 触发器编辑器等其他程序)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多