0

我创建了一个包含两行两列的表:

在此处输入图像描述

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

通常, justSpinBoxes的值通过以下方式访问:

ui->spinBox->value();

但这在这里不起作用。

如何访问将SpinBoxes它们用作 a 中的项目的值QTableWidget?我想SpinBoxes通过迭代访问,因此使用 for 循环遍历所有 Spin Box。

4

2 回答 2

4

表格小部件与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
于 2014-09-11T07:59:23.777 回答
2

另一种方法是这样做:

//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>();

我希望这会有所帮助。

于 2015-09-11T23:27:46.547 回答