【问题标题】:Raise and lower QTreeWidgetItem in a QTreeWidget?在 QTreeWidget 中升高和降低 QTreeWidgetItem?
【发布时间】:2010-01-10 03:01:41
【问题描述】:

问题说明了你如何在 QtreeWidget 中提高和降低 [更改] QTreeWidgetItems 的位置,

【问题讨论】:

    标签: python qt pyqt qtreewidget


    【解决方案1】:

    我相信您需要使用模型对象才能操纵项目位置(如果这是您想要做的)。请检查下面的示例;它将抽象模型的第一项移动到底部。

    QAbstractItemModel* model = your_tree_view->model();
    
    QModelIndex index0 = model->index(0, 0);
    QMap<int, QVariant> data = model->itemData(index0);
    // check siblings of the item; should be restored later
    model->removeRow(0);
    
    int rowCount = model->rowCount();
    model->insertRow(rowCount);
    QModelIndex index1 = model->index(rowCount, 0);
    model->setItemData(index1, data);
    

    一旦项目在模型中移动,您的树视图小部件应该相应地更新自己

    如果您需要更改树视图显示的项目的大小,请安装 item delegate 并覆盖其 sizeHint 方法

    希望这会有所帮助,问候

    【讨论】:

    • LOL,1.获取treeview的模型。 2.获取行/列的模型索引。 3.使用索引获取数据。 4. 删除它。 5.插入一个空白行。 6.获取空白行的索引。 7.使用索引设置空白行的数据。回到 Gtk+,treestore 上的 api 就像 insert()、move_after()、move_before()、swap() 等。这个 qt 的东西完全不直观,为什么人们说它比 Gtk+ 更好我永远不会知道。再次感谢 Serge。
    • @spearfire:其中一部分是使用 Qt 中模型/视图设置的小部件变体。如果您自己创建模型,您只需更改数据在模型中的位置(并发出适当的信号),UI 会自行更新以匹配。
    • 你说得对,简单地交换数据和孩子会更有效
    【解决方案2】:

    我发现 serge 的解决方案对于简单的上移/下移也非常复杂。 由于您使用的是 QTreeWidget ,因此实际上有一个更简单的解决方案:

    QTreeWidgetItem* item = your_qtreewidget->currentItem();
    int              row  = your_qtreewidget->currentIndex().row();
    
    if (item && row > 0)
    {
        your_qtreewidget->takeTopLevelItem(row);
        your_qtreewidget->insertTopLevelItem(row - 1, item);
        your_qtreewidget->setCurrentItem(item);
    }
    

    这里有一个向上移动项目的代码。从这里您应该能够立即找到如何将其向下移动:)!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-13
      • 2020-11-19
      • 1970-01-01
      • 2018-05-04
      • 2012-11-16
      • 2011-09-17
      • 1970-01-01
      相关资源
      最近更新 更多