2013-09-25 118 views
-1

我按照here所述繼承了QAbstractTableModel。我已經編寫使用setData爲:編輯後編輯QTableModel中的數據沒有改變

bool TableModel::setData(const QModelIndex &index, const QVariant &value, int role) 
{ 
    if(role == Qt::EditRole) 
    { 
     Data[index.row()][index.column()]= value.toString(); 
     qDebug()<<Data[index.row()][index.column()];//to check entered data passed or not 
    } 
    return true; 
} 

Qt::ItemFlags TableModel::flags(const QModelIndex &index) const 
{ 
    return Qt::ItemIsEditable|Qt::ItemIsEnabled|Qt::ItemIsSelectable; 
} 

並在主窗口我已連接模型和視圖:

connect(model,SIGNAL(dataChanged(QModelIndex,QModelIndex)),ui->tableView,SLOT(dataChanged(QModelIndex,QModelIndex))); 

,但修改後的數據視圖中未更新。我嘗試從setData函數發出dataChanged信號,但它不起作用。我在代碼中錯過了什麼?


數據功能:

QVariant TableModel::data(const QModelIndex &index, int role) const 
{ 

    switch(role) 
    { 
    case Qt::DisplayRole: 
     if(index.column()==0) 
     { 
     return index.row()+1; 
     } 
     break; 
    case Qt::DecorationRole: 

     if(index.column()==1) 
     { 
      QColor c; 
      c.setRgb(0,200,200,200); 
      return c; 
     } 
     break; 

    case Qt::ToolTipRole: 
     if(index.column()==2) 
     { 
     return "colum 3"; 
     } 
     break; 
    case Qt::StatusTipRole: 
     return "Not editable"; 
     break; 

    case Qt::FontRole: 
    { 
     QFont f; 
     f.setFamily("Times"); 
     f.setBold(true); 
     f.setKerning(true); 
     return f; 
    } 
     break; 
    case Qt::TextAlignmentRole: 
    { 
     return Qt::AlignCenter; 
    } 
     break; 

    case Qt::BackgroundRole: 
     if(index.column()==2) 
     { 
      QColor b; 
      b.setRgb(100,100,250,200); 
     return b; 
     } 
     break; 

    case Qt::ForegroundRole: 
    { 
     QColor b; 
     b.setRgb(0,100,250,200); 
     return b; 
    } 

    case Qt::CheckStateRole: 
     if(index.column()==3) 
     { 
      if(index.row()==1) return true; 
      return false; 
     } 
     break; 

    case Qt::InitialSortOrderRole: 
     return Qt::AscendingOrder;// use not clear 
    } 

    return QVariant(); 
} 
+2

你需要的,如果數據設置成功,發出了'dataChanged()'的信號,但在你的代碼,你不知道。 – vahancho

+0

也請顯示您的模型的數據()函數。 – vahancho

+2

那麼,你在'setData()'函數中修改了一個'Data [] []'的數組,但是你的'data()'函數甚至不使用相同的數組來顯示它的內容。你爲什麼期望你的觀點會顯示其他內容 - 它只是靜態的。 – vahancho

回答

0

這裏有一些注意事項,可以採取。

  • 一旦數據被正確地更新時,應當發出dataChanged()信號。

  • setData()方法中正確設置的data()函數中似乎沒有使用名爲「數據」的二維數組變量。你需要在兩個地方使用(相同)變量。

  • 您不應將dataChanged()信號連接到任何插槽。它會自動爲你工作。