QString default_value = child.firstChildElement("default_value").text();
// добавляем строку
m_ui->tableWidget_postpress->insertRow(row);
// заполняем первую колонку
PostpressTableWidgetItem *item = new PostpressTableWidgetItem();
item->setText(name);
item->setCheckState(Qt::Unchecked);
item->setParentRow(parent_row);
m_ui->tableWidget_postpress->setItem(row, 0, item);
// заполняем вторую колонку
PostpressTableWidgetItem *item_2 = new PostpressTableWidgetItem();
item_2->setText(default_value);
item_2->setParentRow(parent_row);
m_ui->tableWidget_postpress->setItem(row, 1, item_2);
// читаем параметры данной операции
QDomElement param = child.firstChildElement("param");
while (!param.isNull())
{
// извлекаем название параметра и его возможные значения
QString param_name = param.firstChildElement("name").text();
QString param_value = param.firstChildElement("value").text();
m_ui->tableWidget_postpress->insertRow(++row);
// заполняем колонку с названием параметра
PostpressTableWidgetItem *item_3 = new PostpressTableWidgetItem();
item_3->setText(param_name);
// задаем родительскую строку -
// для строки параметра операции родительской строкой
// будет строка с названием операции
item_3->parent_row = parent_row;
m_ui->tableWidget_postpress->setItem(row, 0, item_3);
// заполняем колонку с возможными значениями параметра
QString temp = param_value;
QStringList param_value_list = temp.split(",");
if (!param_value_list.empty())
{
if (param_value_list.size() > 1)
{
// если у параметра несколько возможных значений
// устанавливаем в колонку комбобокс
PostpressComboBox *cb = new PostpressComboBox (parent_row, row - parent_row - 1);
cb->insertItems(0, param_value_list);
connect(cb, SIGNAL(currentIndexChanged(QString)), this, SLOT(UpdatePostpressComboBox(QString)));
m_ui->tableWidget_postpress->setCellWidget(row, 1, cb);
}
else
{
// если возможных значений одно
// устанавливаем в колонку лайнэдит
PostpressLineEdit *cb = new PostpressLineEdit (parent_row, row - parent_row - 1);
cb->setText(param_value_list[0]);
connect(cb, SIGNAL(textChanged(QString)), this, SLOT(UpdatePostpressLineEdit(QString)));
m_ui->tableWidget_postpress->setCellWidget(row, 1, cb);
}
}
// прячем строку параметра операции
m_ui->tableWidget_postpress->hideRow(row);
param = param.nextSiblingElement("param");
}
++row;
parent_row = row;
child = child.nextSiblingElement("operation");
} // завершение цикла while (!child.isNull())
Что касается слотов - см. исходники.