【问题标题】:How to set a string property to QTreeWidgetItem?如何将字符串属性设置为 QTreeWidgetItem?
【发布时间】:2018-09-18 11:24:43
【问题描述】:

我有一个由 id 唯一标识的应用程序特定项目的列表。他们的名字显示在QTreeWidget 中(一个项目对应一个QTreeWidgetItem)。我想以某种方式将相应的 id 附加到这些 QTreeWidgetItems 上,以便在选择更改后我可以访问相应项目的 id 并进行一些处理。

QTreeWidgetItem 不是从QObject 继承的,所以我不能使用它的setProperty 函数。我怎么能这样做?

【问题讨论】:

    标签: c++ qt qtreewidget qtreewidgetitem


    【解决方案1】:

    只需为属性创建一些用户定义的roles...

    typedef enum {
      id_1_role = Qt::UserRole,
      id_2_role,
    
      id_N_role,
    } property_id_role;
    

    然后您可以使用常规方法获取/设置与QTreeWidgetItem 关联的数据。

    QTreeWidgetItem *item = ...
    
    /*
     * Set the property value.
     */
    item->setData(column, property_id_role::id_2_role, id_2_value);
    
    /*
     * Get the property value.
     */
    auto id_2_value = item->data(column, property_id_role::id_2_role).value<id_2_type>();
    

    【讨论】:

      【解决方案2】:

      你知道 QTreeWidgetItem 有一个 setData 方法吗?

      setData(int column, int role, const QVariant &value)
      

      您可以将它与您的角色一起使用。例如:

      int your_id = 123;
      ui->treeWidget->currentItem()->setData(0,Qt::UserRole,your_id);
      qDebug() << ui->treeWidget->currentItem()->data(0,Qt::UserRole);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-25
        • 1970-01-01
        相关资源
        最近更新 更多