Qt

QTableWidget: добавить список QComboBox  в ячейку

Допустим, в объекте values типа QMap<QString, QString> хранятся некоторые пары значений, которыми необходимо заполнить выпадающие списки QComboBox в таблице типа QTableWidget. Таким образом, для каждой строки будет существовать поле, допустимые значения для которого будут браться из заранее определенного и сформированного списка. Самый простой способ установки некоторого объекта в качестве ячейки таблицы — воспользоваться функцией setCellWidget.

ui->tableWidget->setRowCount(ui->tableWidget->rowCount()+1);
QComboBox *box = new QComboBox;
//добавим значения ключей как элементы списка,
//а сами ключи - как userData
foreach(QString index, values.keys())
	box->addItem(values.value(index), index);
//по горизонтали растянем, по вертикали - как решит программа :)
box->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
//вставляем в таблицу QTableWidget в колонку №5
ui->tableWidget->setCellWidget(ui->tableWidget->rowCount() - 1, 5, box);

Теперь выведем все ключи и их значения списков таблицы в дебаг:

int valuesColNum = 5;
for(int i = 0; i < ui->tableWidget->rowCount(); ++i) {
	QComboBox *box;
	box = qobject_cast<QComboBox*>(
		ui->tableWidget->cellWidget(i,valuesColNum));
	qDebug() << i << "строка:";
	qDebug() << "значение ключа:" << box->currentText() << "ключ:" << box->currentData().toString();
}

А вот в записи Добавление данных в таблицу QTableWidget. Очистка таблицы можно еще почитать про работу с данными и таблицей QTableWidget 🙂

Оставьте своё мнение...

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.