Qt QTableWidget QDoubleSpinBoxes / QSpinBoxes作为通过迭代访问值的元素

时间:2014-09-11 07:46:32

标签: c++ qt qtablewidgetitem qspinbox

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

enter image description here

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

2 个答案:

答案 0 :(得分:3)

表格小部件与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

答案 1 :(得分:1)

另一种方法是这样做:

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

我希望这可以提供帮助。