Я создаю таблицу с двумя строками и двумя столбцами:
Второй столбец содержит спинбокс в качестве элементов. Код следующий:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
myTable = ui->tableWidget;
for( int i = 0; i < myTable->rowCount(); i++ )
{
QDoubleSpinBox *spinBox = new QDoubleSpinBox(this);
spinBox->setValue( i + 1 );
myTable->setCellWidget( i, 1, spinBox );
}
}
myTable
объявляется членом MainWindow
.
Обычно значения только SpinBoxes
доступны через:
ui->spinBox->value();
Но здесь это не работает.
Как получить доступ к значениям SpinBoxes
используют в качестве элементов в QTableWidget
? Я хочу получить доступ к SpinBoxes
с помощью итерации, следовательно, используя цикл for для цикла через все Spin Boxes.
Виджет таблицы работает с items
. Каждая ячейка представляет один элемент (в вашем случае 2 строки x 2 столбца = 4 ячейки = 4 элемента). Как вы уже делали, вы можете установить конкретный виджет для одного из элементов, вызвав setCellWidget(int row, int column, QWidget* widget)
. Теперь с соответствующим вызовом cellWidget(int row, int column)
он вернет этот указатель на QWidget, который вы задали раньше.
Единственное, что осталось то, чтобы cast
на QWidget
обратно в производном классе.
double val = static_cast<QDoubleSpinBox*>(myTable->cellWidget(0,1))->value();
Когда вы попросили объяснение, вот код в одной строке с комментариями:
QWidget* some_cell_widget = myTable->cellWidget(0,1); // retrieve widget from cell
QDoubleSpinBox* dbl_spin_box = static_cast<QDoubleSpinBox*>(some_cell_widget); // cast widget to double spin box
double val = dbl_spin_box->value(); // get value from spinbox
Другая альтернатива этому заключается в следующем:
//To set the value:
int valueIWant = 5;
ui->tableWidget->cellWidget(0,2)->setProperty("value",valueIWant);"
//And to read the value:
int actualValue = ui->tableWidget->cellWidget(0,2)->property("value").value<int>();
Надеюсь, это поможет.
QDoubleSpinBox *spinBox
как переменную-член основного окна, также как вы это делали с myTable.