2013-09-16 48 views
3

我想知道如何在Qt框架中實現自己的QAbstractItemModel :: span函數?我知道Qt5還沒有實現該功能。Qt:實現QAbstractItemModel的跨度

我試着爲我的自寫模型重新實現該函數,並通過使用span()來使用span功能。 第一次嘗試根本沒有奏效。因此,我在該重新實現的函數中設置了一個斷點。我意識到Qt從不會觸發該函數(斷點未命中)。

可以幫助我如何實現該功能,以便我不必從視圖控制器內使用setSpan?

+1

的醫生說化QAbstractItemModel: :span()目前沒有使用,所以我認爲你必須修改QTableView(或者你正在使用的任何視圖),所以它使用模型中的span() –

回答

3

感謝丹尼爾·卡斯特羅,我解決了這個如下所示:

QAbstractItemView中的重新實現則setModel:

void View_DndLinBatch::setModel(QAbstractItemModel *model) 
{ 
    QTableView::setModel(model); 

    for (int row = 0; row < this->model()->rowCount(); row++) 
    { 
     for (int col = 0; col < this->model()->columnCount(); col++) 
     { 
      QSize span = this->model()->span(this->model()->index(row, col)); 
      this->setSpan(row, col, span.height(), span.width()); 
     } 
    } 
} 

與化QAbstractItemModel的重新實現跨功能:

QSize model_DndLinBatch::span(const QModelIndex &index) const 
{ 
    if (index.column() == 0) 
    { 
     return QSize(2,1); 
    } 
    else 
    { 
     return QAbstractItemModel::span(index); 
    } 
} 
+3

Kee記住這個解決方案只有在模型保持不變的情況下才有效。該模型可能會改變導致跨度變化的因素。 – mefiX