С Новым годом коллеги! Возникла следующая проблема. Сделан грид на основе QTableView. Первая колонка этого грида не редактируема, вторая колонка может радактироваться пользователем, третья представляет из себя комбобокс, причем третья и вторая колонка всегда должны находиться в режиме редактирования, что бы пользователь мог редактировать вторую колонку, и видел что в гриде есть комбобокс в третьей колонке, сразу, а не по щелчку мыши. Все это сделано спомощью вот такого кода
void Dialog::setupDelegateAndGrid()
{
if (m_fields.count() == 0)
return;
QStringList itemsList;
itemsList << "Default comboBox Text";
for (int i = 0; i < m_fields.count(); i++)
{
itemsList << m_fields.value(i).fieldName;
}
m_delegate = new ComboBoxDelegate();
connect(m_delegate, SIGNAL(textChanged(QString)), this, SLOT(comboTextChanged(QString)));
m_delegate->setItems(itemsList);
m_model = new QStandardItemModel(m_fields.count(), 3);
m_model->setHeaderData(0, Qt::Horizontal, tr("Column1"));
m_model->setHeaderData(1, Qt::Horizontal, tr("Column2"));
m_model->setHeaderData(2, Qt::Horizontal, tr("Column3"));
tableView->setModel(m_model);
tableView->setItemDelegateForColumn(2, m_delegate);
tableView->setEditTriggers(QAbstractItemView::AllEditTriggers);
for (int i = 0; i < m_model->rowCount(); i++)
{
tableView->openPersistentEditor(m_model->index(i, 1));
tableView->openPersistentEditor(m_model->index(i, 2));
m_model->setData(m_model->index(i, 2, "Default comboBox Text" Qt::DisplayRole);
QStandardItem *item = new QStandardItem();
item->setEditable(false);
m_model->setItem(i, 0, item);
}
}
Если пользоваьель вывбирает какой-то item в комбобоксе и для него назначено некое значение по умолчанию, то во второй колонке этой же строки должно появиться это дефолтовое значение, сделано это в такой функции
void Dialog::comboTextChanged(QString text)
{
for (int i = 0; i < m_fields.count(); i++)
{
if (m_fields.value(i).fieldName == text)
{
m_model->setData(m_model->index(tableView->currentIndex().row(), 2), m_fields.value(i).defaultValue.toString(), Qt::DisplayRole);
break;
}
}
}
Но результат этой функции дает о себе знать только тогда когда произошло редактирование или был щелчок по какой то ячейке грида, если сразу выбрать значение в комбобоксе, любой строки грида, то во второй колонке дефолтовое значение не отобазиться для текущей строки.
Подскажите пожалуйста как сделать так что бы у грида было нужное мне поведение.
Спасибо.