Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QTableWidget项获取小部件类型并访问它_C++_Qt_Qtablewidget - Fatal编程技术网

C++ QTableWidget项获取小部件类型并访问它

C++ QTableWidget项获取小部件类型并访问它,c++,qt,qtablewidget,C++,Qt,Qtablewidget,我试图对QtableWidget中的行进行求和,但这样做时出现了分段错误,我不确定是什么导致了这种情况,但我认为这与我将单元格小部件项设置为spinbox,并且没有正确访问它们有关。 在cellChanged事件中设置自旋框时,我也无法使totalRow函数在自旋框更改时启动 totalRow函数(假定在单元格更改时对行进行合计) 找到了cellWidget的解决方案,如上所述 int MainWindow::totalRow(int srow) { int sum = 0; i

我试图对QtableWidget中的行进行求和,但这样做时出现了分段错误,我不确定是什么导致了这种情况,但我认为这与我将单元格小部件项设置为spinbox,并且没有正确访问它们有关。 在cellChanged事件中设置自旋框时,我也无法使totalRow函数在自旋框更改时启动

totalRow函数(假定在单元格更改时对行进行合计)


找到了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;
}
int主窗口::totalRow(int srow)
{
整数和=0;
int num_col=ui->tblScores->columnCount();
对于(int j=0;jtblScores->cellWidget(srow,j);
sum=sum+sp->value();
}
QTableWidgetItem*tableItem=新的QTableWidgetItem;
tableItem->setText(QString::number(sum));
ui->tblScores->setItem(srow,num_col-1,tableItem);
回报金额;
}

我确信您必须调用
cellWidget()
并将其转换到QSpinBox以获取单元格的值。
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));
    }
}
void MainWindow::on_tblScores_cellChanged(int row, int column)
{
    totalRow(row);
}
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;
}