我创建一个具有两行两列的表:



第二列包含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。

剩下的唯一事情就是castQWidget返回到其派生类。

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

10-04 14:28