【问题标题】:QTableView disconnect all delegatesQTableView 断开所有委托
【发布时间】:2015-05-20 10:43:10
【问题描述】:

我有一个 QTableView 和自制委托来显示其单元格内的图像。 要将代表连接到某个列,我使用以下方法:

ui->tableViewQueryResult->setItemDelegateForColumn(ui->lineEditPicColumn->text().toInt() - 1, new ImageDelegate());

是否可以断开之前连接的所有代表?我试过了

ui->tableViewQueryResult->setItemDelegate(NULL);

但这会使程序在运行时崩溃。

【问题讨论】:

    标签: qt qtableview


    【解决方案1】:

    来自setItemDelegate() 的 Qt 文档:

    任何现有的委托都将被删除,但不会被删除。 QAbstractItemView 不获取委托的所有权。

    您需要做的是对于您正在自定义的每个列委托,首先(在某处)记住旧委托并最终恢复它。您还需要删除未使用的委托。 *View 不会为您执行此操作,因为它不获取委托的所有权。

    因此,您还需要使用setColumnDelegate()。如果为列设置委托,则必须为列恢复它,而不是为所有项目。

    你是这样做的:

    class Aaaa
    {
        QHash<int,QAbstractItemDelegate*> delegateForColumn; // <- keep this in class members;
    }
    

    然后:

    void Aaaa::setMyDelegate()
    {
        // Getting column to set on
        int column = ui->lineEditPicColumn->text().toInt() - 1;
    
        // Remembering old delegate
        delegateForColumn[column] = ui->tableViewQueryResult->columnDelegate(column);
    
        // Setting new delegate
        ui->tableViewQueryResult->setColumnDelegate(column, new ImageDelegate());
    }
    
    void Aaaa::unsetMyDelegate()
    {
        // Getting column to reset delegate for
        int column = ui->lineEditPicColumn->text().toInt() - 1;
    
        // Getting current delegate for column, keeping it in local variable, cause we will need to delete it later on
        QAbstractItemDelegate* old = ui->tableViewQueryResult->columnDelegate(column);
    
        // Setting new delegate (the initial one) to the column
        ui->tableViewQueryResult->setColumnDelegate(column, delegateForColumn[column]);
    
        // Deleting our custom delegate, cause we don't need it anymore
        delete old;
    
        // Removing custom delegate from our registry - a cleanup
        delegateForColumn.remove(column);
    }
    

    【讨论】:

      猜你喜欢
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 2014-05-13
      • 2021-07-30
      • 2015-03-18
      • 1970-01-01
      相关资源
      最近更新 更多