Hellow. I make the grid based on QTableView. The first column is not edited. The second column can edited by user. Cells of the third column is comboboxes. I want show comboboxes in cells of the third column always. When user select any item in the commobox any value must insert in the second column. But if I use tableView->openPersistentEditor(); it's not work if I not edit some cell before select item. There is code:
Qt Code:
  1. void Dialog::setupDelegateAndGrid()
  2. {
  3. if (m_fields.count() == 0)
  4. return;
  5.  
  6. QStringList itemsList;
  7. itemsList << "Default comboBox Text";
  8. for (int i = 0; i < m_fields.count(); i++)
  9. {
  10. itemsList << m_fields.value(i).fieldName;
  11. }
  12. m_delegate = new ComboBoxDelegate();
  13. connect(m_delegate, SIGNAL(textChanged(QString)), this, SLOT(comboTextChanged(QString)));
  14. m_delegate->setItems(itemsList);
  15.  
  16. m_model = new QStandardItemModel(m_fields.count(), 3);
  17. m_model->setHeaderData(0, Qt::Horizontal, tr("Column1"));
  18. m_model->setHeaderData(1, Qt::Horizontal, tr("Column2"));
  19. m_model->setHeaderData(2, Qt::Horizontal, tr("Column3"));
  20.  
  21. tableView->setModel(m_model);
  22. tableView->setItemDelegateForColumn(2, m_delegate);
  23. tableView->setEditTriggers(QAbstractItemView::AllEditTriggers);
  24. for (int i = 0; i < m_model->rowCount(); i++)
  25. {
  26. tableView->openPersistentEditor(m_model->index(i, 1));
  27. tableView->openPersistentEditor(m_model->index(i, 2));
  28. m_model->setData(m_model->index(i, 2, "Default comboBox Text" Qt::DisplayRole);
  29. item->setEditable(false);
  30. m_model->setItem(i, 0, item);
  31. }
  32. }
  33.  
  34. void Dialog::comboTextChanged(QString text)
  35. {
  36. for (int i = 0; i < m_fields.count(); i++)
  37. {
  38. if (m_fields.value(i).fieldName == text)
  39. {
  40. m_model->setData(m_model->index(tableView->currentIndex().row(), 2), m_fields.value(i).defaultValue.toString(), Qt::DisplayRole);
  41. break;
  42. }
  43. }
  44. }
To copy to clipboard, switch view to plain text mode 

Help me to solve this problem. Thanks.