關於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++

相關文章
相關標籤/搜索