我创建一个具有两行两列的表:
第二列包含spinBoxes作为元素。代码如下:
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 Box。 最佳答案
表格小部件可与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