关于QTableWidget中单元格拖拽实现

无重写函数实现单元格拖拽

  • 缺点:须要额外设置一个记录拖拽起始行的私有成员变量和拖拽列的初始QList数据成员
  • 优势:无需重构函数,对于QT中信号和槽的灵活运用

信号和槽

// signal
void cellPressed(int row, int column)      // 传递拖拽起始行列

// slots
void StartDrag(int row, int col)
{
    if (col == LAYERFLDCOL)      // 确保拖拽列为可拖拽列
    {
        m_rowFrom= row;      // 记录拖拽起始行
    }
    else
    {
        m_rowFrom = -1;
    }
}

// signal
void cellChanged(int row, int column)      // 传递拖拽后改变行列

// slots
void DropEnd(int row, int col)
{
    if (col == LAYERFLDCOL && m_rowFrom != -1)      // 判断Drop的列是否为可拖拽列
    {
        QgsField fldTo = m_tmpFld.at(row);       // 根据初始数据QList获得最终单元格的数据
        QString changeText = fldTo.name();      // 记录
        m_tmpFld.replace(row, ui->tableWidget->item(m_rowFrom, LAYERFLDCOL)->text());      //  交换初始数据,用于实时跟进拖拽以后的列中数据,即对应的行即为QList中数据的索引
        m_tmpFld.replace(m_rowFrom, changeText);
        ui->tableWidget->item(m_rowFrom, LAYERFLDCOL)->setText(changeText);      // 更新起始行列中单元格的数据
    }
}

Ps: 来自一个菜鸟的无奈之举。c++

相关文章
相关标签/搜索