2017-02-22 163 views
0

選擇高亮我有一個QListView填入QStandardItemModelQStringListModel(基於內容的簡單性...列數)。QListView與QStandardItemModel不顯示通過代碼

在加載或切換小工具時,我搜索應該選擇的項目,並嘗試突出顯示它。

if (first) 
{ 
    m_myListView.setModel(m_standardItemModel); 

    QList<QStandardItem*> lst = m_standardItemModel->findItems(m_value1, Qt::MatchExactly, 1); 
    if(!lst.isEmpty()) 
    { 
     QModelIndex index = lst.at(0)->index(); 
     qDebug() << index.row();     // tells me correct row 
     //m_myListView.setCurrentIndex(index); // no change if I use 
     m_myListView.selectionModel()->select(index, QItemSelectionModel::ClearAndSelect); 
     m_myListView.scrollTo(index); 
    } 
} 
else 
{ 
    m_myListView.setModel(m_stringListModel); 

    int i = m_stringListModel->stringList().indexOf(m_value2); 
    if (i >= 0) 
    { 
     QModelIndex index = m_stringListModel->index(i); 
     m_myListView.selectionModel()->select(index, QItemSelectionModel::ClearAndSelect); 
     m_myListView.scrollTo(index); 
    } 
} 

m_stringListModel版本正確突出顯示(並滾動到項目)。
m_standardItemModel版本不突出顯示行,並且不滾動到項目。但在隨後的使用,它提供了正確的數據,選擇指數:

QModelIndexList indexList = m_myListView.selectionModel()->selectedIndexes(); 
if (!indexList.isEmpty()) 
{ 
    QModelIndex index = indexList.first(); 
    if (index.isValid()) 
    { 
     row = index.row(); 
     data1 = m_standardItemModel->index(row, 1).data().toString(); 

...

所以......看來,選擇工作,但如果這樣做,爲什麼我看不到一個亮點? (和scrollTo()

注 - 代碼非常龐大,但我驗證了重新加載模型的可能性,並可能丟失選擇 - 此外,QStringListModel版本正常工作。

這是QStandardItemModel的典型行爲,還是有我必須做的事情,比如設置BackgroundRole類型的數據?

如何突出顯示應用QStandardItemModel的列表視圖的選擇?

回答

0

因爲發現該項目比顯示項目的不同,列表視圖是無法選擇它...

2解決方案:要麼創建從一個發現了一個不同的QModelIndex,指着顯示欄,或選擇一個包含所需索引的整行:

m_myListView.selectionModel()->select(index, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); 
1

我看到你的代碼,可能你想選擇你的模型的第一個元素?讓我們嘗試:

void MyClass::selectFirstElement() { 
    const QModelIndex firsIndex = _myModel->index(0,0); 
    if (index.isValid()) 
     ui->listView->setCurrentIndex(firstIndex); 
     ui->listView->scrollTo(firstIndex); 
    } 

}

你能分享m_standardItemModel實施?同時正確配置清單:

ui->listView->setSelectionMode(QAbstractItemView::SingleSelection); 
ui->listView->setSelectionBehavior(QAbstractItemView::SelectRows); // Or Columns 

檢查您QStandarItem有選擇flag啓用。有關更多信息,請參閱http://doc.qt.io/qt-4.8/qt.html#ItemFlag-enum

最後,你可以確保&列從模型直接獲取指標在同一行中,像這樣的索引存儲在正確的模式:

QModelIndex index = lst.at(0)->index(); 
index = _model->index(index.row(), index.column()); 

對不起,我英文不好:S