Вычисление промежуточного итога в Qtablewidget

у меня есть Qtablewidget, я реализовал делегат для этой таблицы

вот так: Num(по умолчанию) | элемент (Qcombobox) | -кол-во-(QdoubleSpinBox)| Цена(QdoubleSpinBox)|промежуточный итог (QdoubleSpinBox)

я хочу рассчитать промежуточный итог (количество * цена) для каждой строки с помощью делегата, но на самом деле я не знаю, как выдавать данные из делегата

я попробовал это из своего пользовательского делегата

QWidget *customTableSellDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    if(!index.isValid())
        return QStyledItemDelegate::createEditor(parent,option,index);

    int col= index.column();

    if(col == 1)
    {
        QComboBox *comboboxEditor = new QComboBox(parent);
        return comboboxEditor;
    }
    // col3
    else if(col ==2 || col ==3 || col ==4 || col == 5 || col == 6 || col == 7)
    {
        QDoubleSpinBox *doubleSpinBoxEditor = new QDoubleSpinBox(parent);
        doubleSpinBoxEditor->setInputMethodHints(Qt::ImhFormattedNumbersOnly);
        doubleSpinBoxEditor->setRange(0.000000,999999999);
        doubleSpinBoxEditor->setSuffix(" D.A");
        doubleSpinBoxEditor->setDecimals(2);
        doubleSpinBoxEditor->setFrame(false);

        if(col == 2 || col == 3)
        {
            connect(doubleSpinBoxEditor,SIGNAL(valueChanged(double)),this,SLOT(testSlot(double)));
        }

        return doubleSpinBoxEditor;
    }else{
        return QStyledItemDelegate::createEditor(parent,option,index);
    }

}

Итак, как лучше всего это сделать?


person advseo32    schedule 27.09.2013    source источник


Ответы (1)


подумав, я получаю решение, это код

Примечание: это зависит от моей логики, вы можете изменить это, как хотите.

   QTableWidgetItem *item= NULL;
    for(int row=0; row < ui->tableWidget->rowCount(); row++)
    {
        for (int col=0; col< ui->tableWidget->columnCount(); col++)
        {

            item = new QTableWidgetItem;
            ui->tableWidget->setItem(row,col,item);


        }
    }
    for(int row =0; row < ui->tableWidget->rowCount(); row++)
    {
        for(int col=0; col < ui->tableWidget->columnCount(); col++)
        {
            if(row != 0)
                ui->tableWidget->item(row,col)->setFlags(Qt::NoItemFlags);
            else{
                if(col == 0 || col == 4 || col == 5 || col == 7 || col == 6)
                    ui->tableWidget->item(row,col)->setFlags(Qt::NoItemFlags);

                      }

        }
    }
person advseo32    schedule 27.09.2013