c++ - QTableWidget Item 获取Widget类型并访问它

标签 c++ qt qtablewidget

我正在尝试对 QtableWidget 中的行求和,但这样做时出现段错误,我不确定是什么原因造成的,但我认为这与我将单元格小部件项设置为旋转框和我没有正确访问它们。 当我在 cellChanged 事件中设置旋转框更改时,我也无法让 totalRow 函数触发。

totalRow 函数(当一个单元格被更改时应该对行进行总计)

int MainWindow::totalRow(int srow)
{
    int sum = 0;
    int num_col = ui->tblScores->columnCount();
    int num_row = ui->tblScores->rowCount();
        for (int j = 0; j < num_col - 1 ; ++j) {
            QTableWidgetItem *tableItem = ui->tblScores->item(srow,j);

            sum += tableItem->text().toInt();
            cout << sum << endl;
        }
        QTableWidgetItem *tableItem = new QTableWidgetItem;
        tableItem->setText(QString::number(sum));
        ui->tblScores->setItem(srow,num_col - 1,tableItem);
    return sum;
}

setupTable 函数(这是将表项设置为旋转框的功能)

void MainWindow::setupTable()
{
    int num_col = ui->tblScores->columnCount();
    int num_row = ui->tblScores->rowCount();
    for (int i = 0; i < num_row; ++i) {
        for (int j = 0; j < num_col - 1 ; ++j) {
            ui->tblScores->setCellWidget(i,j,new QSpinBox(ui->tblScores));
        }
        ui->tblScores->setCellWidget(i,num_col - 1,new QLabel(ui->tblScores));
    }
}

cellChanged 事件

void MainWindow::on_tblScores_cellChanged(int row, int column)
{
    totalRow(row);
}

最佳答案

按照上面的建议使用 cellWidget 找到了解决方案。

int MainWindow::totalRow(int srow)
{
    int sum = 0;
    int num_col = ui->tblScores->columnCount();
        for(int j = 0; j < num_col - 1 ; j++) {
            QSpinBox* sp;
            sp = (QSpinBox*)ui->tblScores->cellWidget(srow,j);
            sum = sum + sp->value();
        }
        QTableWidgetItem *tableItem = new QTableWidgetItem;
        tableItem->setText(QString::number(sum));
        ui->tblScores->setItem(srow,num_col - 1,tableItem);
    return sum;
}

关于c++ - QTableWidget Item 获取Widget类型并访问它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22918218/

相关文章:

c++ - 给定数字位于哪个段?

c++ - 线程静态类方法与全局范围

qt - Qt Designer 中的网格布局未均等划分空间

c++ - const char* 与 C++ 双重翻译问题

python - PyQt5:QTableWidget 中复选框的状态更改

c++ - 将 vector 初始化为整数列表

c++ - 使用基类的派生类中定义的类型

c++ - 使用带有 C 结构的 C++ 模板进行内省(introspection)?

c++ - 如何创建从 C++ 对象数组填充的 qtablewidget?

QTableWidgetItem 设置隐藏数据