2014-06-07 121 views
1

我有一個clicked()-signal它知道QModelIndex類型的選定索引。如何使用QModelIndex訪問QStandardItemModel及其數據?

void onListClicked(const QModelIndex & index) { /* ... */ } 

否我想訪問被點擊項目的數據。我發現我可以訪問使用model()模型:

void onListClicked(const QModelIndex & index) 
{ 
    QStandardItemModel * model {index.model()}; 
} 

但這種失敗的模型()吸氣劑只允許我返回QAbstractItemModel

error: invalid conversion from 'const QAbstractItemModel*' to 'QStandardItemModel*' [-fpermissive] 

如何訪問QStandardItemModel甚至更​​好的選擇QStandardItem?我的唯一標識符存儲在QStandardItem::data()中。

我需要的是類似的東西:

void onListClicked(const QModelIndex & index) 
{ 
    QStandardItemModel * model {index.model()}; 
    QStandardItem * item {model->itemFromIndex(index)}; 
    qDebug() << item->data().toString(); 
} 

但是,這並不工作。爲什麼這麼難。我在這裏錯過什麼?

回答

3

我想你可以直接從模型索引獲取數據:

void onListClicked(const QModelIndex & index) { 
    index.data(Qt::UserRole + 1); 
    // ... 
} 

你可以使用任何其他角色來獲取不同種類的數據。

+0

這個角色只是做我需要的。再次感謝! – default

0

只投它:

QStandardItemModel *model { static_cast<QStandardItemModel *>(model()); } 
+0

不工作。 '錯誤:static_cast從'const QAbstractItemModel *'到'QStandardItemModel *'轉換了限定符' –

+1

然後,只需在演員表中添加一個'const'。沒有意識到'model()'返回了一個指向const的指針。 – peppe

相關問題