PDA

View Full Version : Unusual TableView



giker
6th January 2011, 13:10
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:


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);
}
}

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;
}
}
}


Help me to solve this problem. Thanks.