我创建了一个包含两行和两列的表:
第二列包含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。
答案 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>();
我希望这可以提供帮助。