當顯示數據,在一個QTableView中,由於內部的原因,我無法顯示的第一行,因此具有隱藏它,使用更改行標籤起始索引(垂直插頭)在QTableView中
(qtableobj)->hideRow(0);
的問題是,現在行標籤從2
開始怎麼可能從1開始的索引,同時保持第一排隱藏?
謝謝。
當顯示數據,在一個QTableView中,由於內部的原因,我無法顯示的第一行,因此具有隱藏它,使用更改行標籤起始索引(垂直插頭)在QTableView中
(qtableobj)->hideRow(0);
的問題是,現在行標籤從2
開始怎麼可能從1開始的索引,同時保持第一排隱藏?
謝謝。
您可以嘗試涉及QSortFilterProxyModel
,它會過濾掉模型中的第一行。 的代碼可能看起來像:
class FilterModel : QSortFilterProxyModel
{
[..]
protected:
bool filterAcceptsRow(int sourceRow, const QModelIndex & sourceParent) const
{
QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
if (index.row() == 0) // The first row to filter.
return false;
else
return QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent);
}
}
最後,您需要這種模式設爲您的表視圖:
QTableView *table = new QTableView;
MyItemModel *sourceModel = new MyItemModel;
QSortFilterProxyModel *proxyModel = new FilterModel;
proxyModel->setSourceModel(sourceModel);
table->setModel(proxyModel);
UPDATE
由於問題是如何標題視圖顯示行號,這裏是基於模型中對標題數據的特殊處理的替代解決方案:
class Model : public QAbstractTableModel
{
public:
[..]
virtual QVariant headerData(int section, Qt::Orientation orientation,
int role = Qt::DisplayRole) const
{
if (role == Qt::DisplayRole) {
if (orientation == Qt::Vertical) {
// Decrease the row number value for vertical header view.
return section - 1;
}
}
return QAbstractTableModel::headerData(section, orientation, role);
}
[..]
};
用隱藏的第一行設置表視圖。
QTableView *table = new QTableView;
Model *sourceModel = new Model;
table->setModel(sourceModel);
table->hideRow(0);
table->show();
對不起,昨天沒有正確測試,我subclassed QProxymodel,並按照上述步驟..我面臨同樣的問題,行1是隱藏的,但行編號從兩個 –
@BeagleBone開始,請看看上面更新的答案。 – vahancho
謝謝......我以另一種方式解決了這個問題,但答案看起來不錯,應該工作:) –
如果引入'QSortFilterProxyModel'來過濾第一行怎麼辦? – vahancho
是的,我明白它可以在模型和視圖之間過濾數據,只要模型中的數據沒有改變,我就可以使用它,當然不需要做太多的返工....你能演示一個演示怎麼做?謝謝 ! –