【问题标题】:how to add QSpinBox to a QTableWidget?如何将 QSpinBox 添加到 QTableWidget?
【发布时间】:2020-07-23 06:07:38
【问题描述】:

我有一个 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);

}

我该怎么办?

【问题讨论】:

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

标签: qt qwidget qtablewidget qlineedit qspinbox


【解决方案1】:
  1. QTableWidget 应该定义了 rowCountcolumnCount 属性。它可以通过QTableWidget 构造函数(https://doc.qt.io/qt-5/qtablewidget.html#QTableWidget-1)或通过适当的方法(setRowCountssetColumnCounts)来完成。如果已经完成,那就太好了。
  2. insertRow 在表中的给定位置插入一个空行。仅当您之前定义了 rowCountcolumnCount 时,ui->tableWidget->insertRow(1) 才会在位置 1 处插入新行(参见第 1 点)。
  3. 这取决于您的想法 - 如果您希望至少有 4 列(请注意,我们从 0 开始计数,并且尝试将 QSpinBox 放入第三列)并始终插入新产品第一行,您的第 1 点已填充的代码可以正常工作。但是,如果您的想法是每次添加新的 product 时都添加一个新行,那么您应该调用 ui->tableWidget->insertRow(tableWidget->rowCount()) 并使用该值来处理相应的行。

您可能还想看看这里例如如何设置QTableWidget:https://wiki.qt.io/How_to_Use_QTableWidget

【讨论】:

    猜你喜欢
    • 2021-12-18
    • 1970-01-01
    • 2012-08-14
    • 2011-07-30
    • 2018-12-10
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多