Add spinbox to a cell and manipulate it individually
Unsolved
General and Desktop
-
I have a program that is used to manage sales and inventory, but I do not know how I can manipulate a spinbox in the cell added by a delegate, I know that programs like qBittorrent do this for example in the list of torrent and each item has its own progress bar
My code:
#ifndef VENDERPRODUTO_HPP #define VENDERPRODUTO_HPP #include <QItemDelegate> #include <QDialog> #include "../core/vendas.hpp" namespace Ui { class NovaVenda; } class QCompleter; class QStandardItemModel; class QRegExpValidator; class NovaVenda : public QDialog { Q_OBJECT public: explicit NovaVenda(QWidget *parent = nullptr); ~NovaVenda(); private slots: void on_leInput_returnPressed(); void on_pb_AddCarrinho_clicked(); void on_pbRemoveCarrinho_clicked(); void on_dsbQuantidade_valueChanged(double value); private: Ui::NovaVenda *ui; QCompleter *nomesCompleter, *codigoCompleter; QStandardItemModel *modeloTabela; QRegExpValidator *codBarraValidator; QHash<QString, ItemVenda> produtos; Produtos produto; double total; }; class TableDelegate : public QItemDelegate{ public: TableDelegate() = default; ~TableDelegate() = default; QWidget *createEditor(QWidget *parent,const QStyleOptionViewItem & option ,const QModelIndex & index ) const; }; #endif // VENDERPRODUTO_HPP
#include <QCompleter> #include <QStandardItemModel> #include <QMessageBox> #include <QRegExpValidator> #include "novavenda.hpp" #include "ui_novavenda.h" #include "../core/produtos.hpp" #include "../core/vendas.hpp" NovaVenda::NovaVenda(QWidget *parent) : QDialog(parent), ui(new Ui::NovaVenda) { ui->setupUi(this); static QStringList headers = {"Código", "Nome", "Quantidade"}; modeloTabela = new QStandardItemModel(0, 3); modeloTabela->setHorizontalHeaderLabels(headers); ui->tvCarrinho->setModel(modeloTabela); ui->tvCarrinho->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); ui->tvCarrinho->horizontalHeader()->setSectionResizeMode(1, QHeaderView::ResizeToContents); ui->tvCarrinho->setItemDelegateForColumn(2, new TableDelegate()); // Lista os códigos e nomes para que os campos o auto complete QVector<Produtos> produtos = Produtos::listarProdutos(); if(!produtos.isEmpty()){ QStringList nomes, codigos; for(int i = 0; i < produtos.size(); i++){ nomes.insert(i, produtos[i].nome()); codigos.insert(i, produtos[i].codigoVenda()); } nomesCompleter = new QCompleter(nomes); codigoCompleter = new QCompleter(codigos); } ui->leInput->setCompleter(codigoCompleter); codBarraValidator = new QRegExpValidator(QRegExp("^[0-9]*$")); } NovaVenda::~NovaVenda() { delete ui; } void NovaVenda::on_leInput_returnPressed() { // Obtem o produto desejado para que seja adicionado no carrinho if(ui->rb_CodVenda->isChecked()){ QVector<Produtos> produtos = Produtos::listarProdutos(FiltroProdutos::CODIGOVENDA, ui->leInput->text()); produto = produtos[0]; }else if(ui->rb_CodBarras->isChecked()){ QVector<Produtos> produtos = Produtos::listarProdutos(FiltroProdutos::CODIGOBARRAS, ui->leInput->text()); produto = produtos[0]; }else if(ui->rb_Nome->isChecked()){ produto = Produtos::produto(ui->leInput->text()); } } void NovaVenda::on_pb_AddCarrinho_clicked() { // Verifica se o item ja nao esta adicionado if(!produtos.contains(produto.nome())){ ItemVenda item; item.produto = produto; int row = modeloTabela->rowCount(); modeloTabela->setItem(row, 0, new QStandardItem(produto.codigoVenda())); modeloTabela->setItem(row, 1, new QStandardItem(produto.nome())); } } void NovaVenda::on_pbRemoveCarrinho_clicked() { //Remove o item da tabela const QModelIndex index = ui->tvCarrinho->selectionModel()->currentIndex(); produtos.remove(modeloTabela->data(modeloTabela->index(index.row(), 1)).toString()); modeloTabela->removeRow(index.row()); } // Altera a aparencia de uma determinada celula QWidget *TableDelegate::createEditor(QWidget *parent,const QStyleOptionViewItem & option ,const QModelIndex & index ) const { QDoubleSpinBox *dsbQuantidade = new QDoubleSpinBox(parent); return dsbQuantidade; }
-
Hi,
What exact manipulation do you have in mind ?