如何将QSpinBox添加到QTableWidget?

如何将QSpinBox添加到QTableWidget?,qt,qwidget,qtablewidget,qlineedit,qspinbox,Qt,Qwidget,Qtablewidget,Qlineedit,Qspinbox,我有一个QTableWidget和一个名为p的产品类对象。 我想在这个表中添加项目。 我尝试了下面的代码,但没有用 void MainWindow:: add_to_basket (product p){ ui->tableWidget->insertRow(1); QLineEdit *qle=new QLineEdit(); qle->setText(p.get_name()); ui->tableWidget->setCel

我有一个QTableWidget和一个名为
p
的产品类对象。 我想在这个表中添加项目。 我尝试了下面的代码,但没有用

void MainWindow:: add_to_basket (product p){

    ui->tableWidget->insertRow(1);

    QLineEdit *qle=new QLineEdit();
    qle->setText(p.get_name());
    ui->tableWidget->setCellWidget(1,1,qle);

    QLineEdit *qle1=new QLineEdit();
    qle1->setText(QString::number(p.get_price()));
    ui->tableWidget->setCellWidget(1,2,qle1);

    QSpinBox *qsb=new QSpinBox();
    qsb->setValue(p.get_count());
    ui->tableWidget->setCellWidget(1,3,qsb);

}
我该怎么办

  • QTableWidget
    应该定义
    rowCount
    columnCount
    属性。它可以通过
    QTableWidget
    constructor()或通过适当的方法(
    setRowCounts
    setColumnCounts
    )完成。如果已经完成了,那就太好了
  • insertRow
    在给定位置将空行插入表中
    ui->tableWidget->insertRow(1)
    仅当您之前定义了
    rowCount
    columnCount
    时,才会在位置
    1
    插入新行(参见第1点)
  • 这取决于您的想法-如果您希望至少有4列(请注意,我们从0开始计数,并且尝试将
    QSpinBox
    放入第三列)并始终在第一行插入新产品,则您的代码第1点已完全填充将可以正常工作。但是,如果您的想法是在每次添加新的
    产品时添加新行,那么您应该调用
    ui->tableWidget->insertRow(tableWidget->rowCount())
    ,并使用该值来寻址相应的行

  • 您可能还想看看这里,例如如何设置
    QTableWidget

    您正在插入到一个空表中的不存在的位置。Qt使用基于0的索引,因此尝试在空表中的位置1插入行将失败。另外,您确定已将表设置为具有足够的列吗?对于当前代码,它需要有4列。我建议您将当前行数存储在常量变量
    ,然后调用
    insertRow(row)
    ,并对setCellWidget调用使用相同的
    变量。