Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
 Аватар для Ruslan7777777
7 / 6 / 1
Регистрация: 15.11.2019
Сообщений: 75

Не правильное отображение данных модели QSqlQueryModel

17.06.2020, 21:51. Показов 1751. Ответов 13

Студворк — интернет-сервис помощи студентам
День добрый! есть проблема не пойму, что ни так, есть проект с двумя TableView, на первом показан список выбора строк после чего есть диалоговое окно добавить строку на следующую страницу или нет. После выбора добавить в третьем окне отображается что выбрали и имеется функция удалять что есть на этой странице(3-й), всё работает, но если со второй странице удалить строку и потом опять из первой страницы добавить новую, то она не отображается, но если добавить ещё одну отображается последняя добавленная, т.е. было (1, 2, 3) - на второй странице удалили 2-ю строку - осталось (1, 3) - работает. Добавляем из первой страницы строку 4, на второй странице qDebug() показывает (1, 3, 4) но фактически отображается (1,3). Добавляем из первой страницы еще строку 5, qDebug() второй страницы показывает (1, 3, 4, 5) фактически вторая страница отображает (1, 3, 5), т.е. номер 4 - не отображает. Пробовал model->submit() - не помогло. Не пойму что ни так. Всё работает через сигналы и слоты, Отображение данные из SQLITE

1 страница:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void DList::on_tableViewD_clicked(const QModelIndex &index)
{
        emit ParametrProductIdPD(mode->data(modelDQ->index(ui->tableViewD->currentIndex().row(), 0)).toString());
        emit ParametrProductLD(modelDQ->data(modelDQ->index(ui->tableViewD->currentIndex().row(), 1)).toString());
        emit ParametrPraceLD(modelDQ->data(modelDQ->index(ui->tableViewD->currentIndex().row(), 2)).toString());
        emit ParametrProductQuantitySql(modelDQ->data(modelDQ->index(ui->tableViewD->currentIndex().row(), 3)).toString());
        qDebug() << "Индекс товара выбранного для добавления в корзину: " << productId;
        qDebug() << "modelDQ списка передачи товара в корзину(слот стр.2 - 208): " << modelDQ;
 
        int row = index.row();
        int column = index.column();
        modelDQ->index(row, column);
        productId = modelDQ->record(row).value("IdProduct").toInt();
        emit ClickedDetailD(productId); //передаём данные в диалог
        dialogBasket->show();
 
}
диалоговое окно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void DialogBasketProduct::on_pushButtonYes_clicked()
{
 
    emit ParametrSpinBoxDialog(ui->spinBoxProduct->text());
    qDebug() << "Количество товара добавляемого в корзину?(слот стр.3 - 142): " << ui->spinBoxProduct->text();
 
    emit ParametrPraceDialog(ui->lineEditPriceProduct->text());
 
    QSqlQuery queryReserveProduct;
    queryReserveProduct.prepare("UPDATE Price SET DumpQuantity=:d WHERE IdProduct=:id");
    queryReserveProduct.bindValue(":d", ui->spinBoxProduct->value());
    queryReserveProduct.bindValue(":id", ui->lineEditIdproductDialog->text().toInt());
 
        if(!queryReserveProduct.exec()){
             qDebug() << "queryReserveProduct: " << "Не возможно произвести запись";
           }
    qDebug() << "Вносим в базу запись о резерве IdProducta/spinKolReserve(слот стр.3 - 148): "
             <<ui->lineEditIdproductDialog->text().toInt()<<" / "<<  ui->spinBoxProduct->value();
 
    emit ClickedDetailDialog(ui->lineEditIdproductDialog->text().toInt());
    qDebug() << "Добавить в корзину?(слот стр.3 - 157): " << "Да добавить";
    ModelB.submit();
 
    this->close();
}
3-е окно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
void Basket::receiveParameterDetail(int id)
this->productIds.push_back(id);
 
 
    QString query = "SELECT IdProduct, NameProduct, Price, DumpQuantity, Foto FROM SpisokProductR where IdProduct IN (";
    for (int i = 0; i < this->productIds.size(); i++) {
         query += (i ? "," : "");//если i? т.с = 0 далее = , если не = 0 т.е i!?, "" - ничего пустой символ
        query += QString::number(this->productIds[i]);
 
        cout << "Индекс добавленного товара в корзину(слот стр.4 - 69):  " << productIds [i] << endl;
    }
    query += ")";
 
 
    
    modelB = new ModelB;
    modelB->setQuery(query);
    modelB->submit();
    modelB->indexInQuery(modelB);
    ui->tableViewBasket->setModel(modelB);
 
 
    modelB->setHeaderData(1, Qt::Horizontal, tr("НАИМЕНОВАНИЕ ТОВАРА В КОРЗИНЕ"));
    modelB->setHeaderData(2, Qt::Horizontal, tr("ЦЕНА"));
    modelB->setHeaderData(3, Qt::Horizontal, tr("КОЛИЧЕСТВО ТОВАРА"));
    modelB->setHeaderData(4, Qt::Horizontal, tr("ФОТО"));
    modelB->insertColumn(5);
    modelB->setHeaderData(5, Qt::Horizontal, tr("УДАЛИТЬ ТОВАР"));
 
    ui->tableViewBasket->horizontalHeader()->setStretchLastSection(true);
    for (int i = 0; i < 200; i++){
        QModelIndex index = ui->tableViewBasket->model()->index(i, 5);
        QLabel *photo = new QLabel();
        photo->setAlignment(Qt::AlignCenter);
        photo->setPixmap(QPixmap("/home/home/Qt/MagR1/Foto/deleteproduct"));
        ui->tableViewBasket->setIndexWidget(index, photo);
    }
 
    ui->tableViewBasket->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); //атоматическая ширина колонок по тексту
    ui->tableViewBasket->resizeColumnToContents(true);
    ui->tableViewBasket->resizeRowsToContents();
    ui->tableViewBasket->hideColumn(0);
    qDebug() << "modelB товаров в корзине (слот стр.4 - 114): " << modelB;
 
 
    this->close();
}
удаление товара на 3-й странице
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if(deleteProduct.exec() == QMessageBox::Yes){
         int r = modelB->data(modelB->index(ui->tableViewBasket->currentIndex().row(), 0)).toInt();
         qDebug() << "r(слот стр.4 - 186): " << r;
 
          ui->tableViewBasket->setRowHidden(index.row(), true);
         std::vector<int>::iterator it = productIds.begin();
         for( int i = 0; i < productIds.size(); i++, ++it )
         {
             if (productIds.at(i) == r)
             {
                 qDebug() << "r(слот стр.4 - 193): " << productIds.at(i);
                 it = productIds.erase(it);
                 ui->tableViewBasket->setRowHidden(index.row(), true);
                 productIds.shrink_to_fit();
                  modelB->submit();
 
                 qDebug() << "Индекс товара выбранного для удаления из корзины(слот стр.4 - 197): " << productIds;
                 qDebug() << "modelB после удаления товара(слот стр.4 - 198): " << modelB;
                 qDebug() << "Удалить товар из корзины - (слот стр.4 - 199)?: " << "Да";
                 qDebug() << "std::vector<int> после удаления товара - (слот стр.4 - 200): " << productIds << endl;
             }
         }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.06.2020, 21:51
Ответы с готовыми решениями:

Не правильное отображение модели видеокарты
Установил видеокарту gtx 760, но без одного вентилятора(вместо него приделал корпусный и запитал его от БП ). В системе видеокарты...

Правильное отображение информации из базы данных
Допустим есть определенный текст который берется из базы. Для отображения данного текста используется одно и тоже представление. Допустим...

Access 2007 Правильное отображение данных в форме
Добрый день! Нужно было создать базу данных с возможностью заполнения её из формы,то есть полное...

13
 Аватар для Annemesski
2673 / 1335 / 480
Регистрация: 08.11.2016
Сообщений: 3,687
18.06.2020, 07:39
Все очень странно... полагаю Вам нужен не сабмит, а селект
1
 Аватар для Ruslan7777777
7 / 6 / 1
Регистрация: 15.11.2019
Сообщений: 75
18.06.2020, 08:42  [ТС]
Annemesski,
селект - не помогает.
Есть одна странность если использовать после удаления строки из vector, ui->tableView->deleteLater(); или destroyed(); зачистка tableView 3-й страницы происходит не корректно, т.е. удаляются из отображения 3-й страницы все строки а не выбранная на удаление, но при добавление новой строки отображение tableView (3-й) страницы происходит правильно т.е. показывает которые оставались строки и которую добавили новую.
0
 Аватар для Annemesski
2673 / 1335 / 480
Регистрация: 08.11.2016
Сообщений: 3,687
18.06.2020, 09:00
Цитата Сообщение от Ruslan7777777 Посмотреть сообщение
селект - не помогает.
даже если заменить в void Basket::receiveParameterDetail(int id) строку 19
C++ (Qt)
1
modelB->submit();
на
C++ (Qt)
1
modelB->select();
???

Добавлено через 2 минуты
Ruslan7777777, и еще: в коде метода void Basket::receiveParameterDetail(int id) который Вы привели не хватает открывающей фигурной скобки (начальной, открывающей тело сразу после объявления сигнатуры) - это ошибка при копировании на форум или у Вас в коде так?
1
 Аватар для Ruslan7777777
7 / 6 / 1
Регистрация: 15.11.2019
Сообщений: 75
18.06.2020, 09:32  [ТС]
Цитата Сообщение от Annemesski Посмотреть сообщение
modelB->select();
при этом, происходит следующая ошибка:
/home/home/Qt history - memory/02.06.20/MagR1/basket.cpp:89: ошибка: ‘class QSqlQueryModel’ has no member named ‘select’; did you mean ‘revert’?
modelB->select();
^~~~~~
revert
^
select(); - не предлагает такого


относительно фигурной скобки - это ошибка при копировании
0
 Аватар для Annemesski
2673 / 1335 / 480
Регистрация: 08.11.2016
Сообщений: 3,687
18.06.2020, 09:49
Ruslan7777777, да у QueryModel нет метода select, но и submit там не к месту, как и следующий за ним modelB->indexInQuery(modelB); интересно чего Вы хотите добиться этим вызовом учитывая что вы редактируете модель, а в описании метода есть следующий пассаж:
The return value is identical to item if no columns or rows have been inserted, removed, or moved around.
Возвращаемое значение идентично элементу, если столбцы или строки не были вставлены, удалены или перемещены.
1
 Аватар для Ruslan7777777
7 / 6 / 1
Регистрация: 15.11.2019
Сообщений: 75
18.06.2020, 09:59  [ТС]
Annemesski, к сожалению - смотрим в книгу видим фигу... просмотрел...по английски читаю плохо...работаю переводчиками...

Добавлено через 2 минуты
Цитата Сообщение от Annemesski Посмотреть сообщение
учитывая что вы редактируете модель
относительно этого я вообще в затруднениях...модель первой страницы и третьей...полагал разные...не думал, что надо первой странице сообщать о том, что есть изменения, может в этом проблема.
0
 Аватар для Annemesski
2673 / 1335 / 480
Регистрация: 08.11.2016
Сообщений: 3,687
18.06.2020, 11:19
Ruslan7777777, я так понимаю что modelDQ и modelB - это разные сущности в программе, но судя по:
C++ (Qt)
1
productId = modelDQ->record(row).value("IdProduct").toInt();
и
C++ (Qt)
1
QString query = "SELECT IdProduct, NameProduct, Price, DumpQuantity, Foto FROM SpisokProductR where IdProduct IN (";
для modelB - они завязаны на один и тотже источник данных (не только база, но таблица в базе), следовательно да: modeDQ и modelB должны уведомлять друг друга о вносимых в базу изменениях.
1
 Аватар для Ruslan7777777
7 / 6 / 1
Регистрация: 15.11.2019
Сообщений: 75
18.06.2020, 11:32  [ТС]
Annemesski, правильно ли я понимаю, что мне надо прописать методы setData, data, insertRows, removeRows и если да, то мне надо реализовать данные методы и в первом и третьем tableview?
0
 Аватар для Annemesski
2673 / 1335 / 480
Регистрация: 08.11.2016
Сообщений: 3,687
18.06.2020, 12:50
Ruslan7777777, эмммм... думаю что вам надо в DList прописать слот onDBChanged() в котором вызвать modelDQ->setQuery(query); и tableViewD->setModel(modelDQ); а на третьей странице выбрасывать сигнал активирующий этот слот по успеху modelB->submit()
1
 Аватар для Ruslan7777777
7 / 6 / 1
Регистрация: 15.11.2019
Сообщений: 75
21.06.2020, 12:07  [ТС]
Цитата Сообщение от Annemesski Посмотреть сообщение
эмммм... думаю что вам надо в DList прописать слот onDBChanged() в котором вызвать modelDQ->setQuery(query); и tableViewD->setModel(modelDQ); а на третьей странице выбрасывать сигнал активирующий этот слот по успеху modelB->submit()
так тоже не получилось...но если из третей страницы убрать строчку "ui->tableViewBasket->setRowHidden(index.row(), true);" выбранная строка для удаления не скрывается визуально со страницы, но в самом vector удалена, и последующие добавления становятся видны!!! Получается, что теперь надо - визуально удалить строку записи о которой уже нет в vectore. Но пока без результата, может есть идеи?!
0
 Аватар для Annemesski
2673 / 1335 / 480
Регистрация: 08.11.2016
Сообщений: 3,687
22.06.2020, 06:56
Ruslan7777777, нифига не понятно, что-то криво в архитектуре, скиньте прототипы DList и Basket
0
 Аватар для Ruslan7777777
7 / 6 / 1
Регистрация: 15.11.2019
Сообщений: 75
24.06.2020, 21:22  [ТС]
dlist.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#ifndef DLIST_H
#define DLIST_H
 
#include <QWidget>
#include <QApplication>
#include <QSqlDatabase>
#include <QSqlQueryModel>
#include <QTableView>
#include <QTableWidget>
#include <QDialog>
#include <QMessageBox>
#include <QPixmap>
#include <QStyledItemDelegate>
#include <QSqlRelationalDelegate>
#include <QAbstractItemDelegate>
#include <QIdentityProxyModel>
#include <QPainter>
#include <QStyleOptionViewItem>
#include <QModelIndex>
#include "basket.h"
#include "dialogbasketproduct.h"
 
#include <iostream>
#include <algorithm>
using namespace std;
 
class Basket;
class DialogBasketProduct;
 
namespace Ui {
class DList;
}
 
class DList : public QTableView
{
    Q_OBJECT
 
public:
    explicit DList(QWidget *parent = 0);
    //DList *DList::parentD() const;
    ~DList();
 
    int kol = 0;
    int kolsum = 0;
    int price = 0;
    int priceSum = 0;
    int priceSumSum = 0;
    int currentQuantity = 0;
    int productId = 0;
 
    int kolDel = 0;
    int kolsumDel = 0;
    int priceDel = 0;
    int priceSumDel = 0;
    int priceSumSumDel = 0;
 
public slots:
    void receiveParameterPriceSpisokProductDL(const QString &currenttextP, const QString &currenttextSB);
 
    void slotClearLineEditOplatabasket();
 
    void slotClearLineEditBacSpisokProduct();
 
    void receiveParameterProizvoditel(int id);
 
    void slotClearLineEditLDPriceQuantityIsB(const QString &priceb, const QString &kolb);
 
private slots:
    void on_tableViewD_clicked(const QModelIndex &index);
 
    void on_pushButtonDBasket_clicked();
 
    void on_pushButtonDlBacProizvoditel_clicked();
 
    void showFierstWBasket();
 
signals:
    void ClickedDetailB (int i);
    void ClickedDetailD (int i);
    void ClearBasket();
    void ParametrProductLD(const QString &name);
    void ParametrPriceQuantityLD(const QString &nameP, const QString &nameSB);
    void ParametrProductIdPD(const QString &name);
 
private:
    Ui::DList *ui;
    QSqlQueryModel *modelDQ;
    Basket *basket;
    DialogBasketProduct *dialogBasket;
 
};
 
class ModelD : public QSqlQueryModel
{
    Q_OBJECT
public:
    ModelD();
    QVariant data(const QModelIndex &index, int role) const;
 
};
dlist.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
#include "dlist.h"
#include "ui_dlist.h"
 
#include <QWidget>
#include <QApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QSqlRecord>
#include <QTableView>
#include <QPushButton>
#include <QLineEdit>
#include <QMessageBox>
#include <QDialogButtonBox>
#include <QGridLayout>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QLineEdit>
#include <QStyledItemDelegate>
#include <QSpinBox>
#include <QFont>
#include <QDial>
#include <QDialogButtonBox>
#include <QIcon>
#include <QDebug>
#include <QVariant>
#include <QtCore>
#include <QLibraryInfo>
#include <QAbstractItemDelegate>
#include <QtGui>
#include <QTranslator>
#include <QGraphicsPixmapItem>
#include "basket.h"
#include "dialogbasketproduct.h"
 
 
 
DList::DList(QWidget *parent) : QTableView(parent),
    ui(new Ui::DList)
{
    ui->setupUi(this);
    this->setWindowTitle(tr("СПИСОК ТОВАРОВ"));
    modelDQ = new QSqlQueryModel();
    basket = new Basket();
    dialogBasket = new DialogBasketProduct();
 
 
    DList::ui->pushButtonDBasket->setIconSize(QSize(160, 160));
 
    connect(this, SIGNAL(ClickedDetailD(int)), dialogBasket, SLOT(receiveParameterDetailDialog(int)));
    connect(this, SIGNAL(ParametrProductLD(QString)), dialogBasket, SLOT(receiveParameterProductDialog(QString)));
    connect(this, SIGNAL(ParametrPriceQuantityLD(QString,QString)), dialogBasket, SLOT(receiveParameterPriceQuantityDialog(QString,QString)));
    connect(this, SIGNAL(ParametrProductIdPD(QString)), dialogBasket, SLOT(receiveParameterIdPD(QString)));
 
    connect(this, SIGNAL(ClickedDetailB(int)), dialogBasket, SLOT(on_pushButtonYes_released()));
    connect(this, SIGNAL(ClearBasket()), dialogBasket, SLOT(ClearBasketDialogBacSpisokProduct()));
 
    connect(dialogBasket, SIGNAL(ParametrSpinBoxPriceDialog(QString,QString)), this, SLOT(receiveParameterPriceSpisokProductDL(QString,QString)));
    connect(dialogBasket, SIGNAL(ClearDlistIsBasketOplataBasket()), SLOT(slotClearLineEditOplatabasket()));
    connect(dialogBasket, SIGNAL(ClearDlistIsBasketBacSpProduct()), SLOT(slotClearLineEditBacSpisokProduct()));
    connect(dialogBasket, SIGNAL(ClearDBPPriceQuantityIsB(QString,QString)), SLOT(slotClearLineEditLDPriceQuantityIsB(QString,QString)));
  
}
 
DList::~DList()
{
    delete ui;
}
 
void DList::receiveParameterPriceSpisokProductDL(const QString &currenttextSB, const QString &currenttextP)
{
    kol = currenttextSB.toInt();
    kolsum = kol + kolsum;
    ui->lineEditQuantity->setText(QString::number(kolsum));
 
    price = currenttextP.toInt();
    priceSum = price * kol;
    priceSumSum = priceSum + priceSumSum;
    ui->lineEditLDSum->setText(QString::number(priceSumSum));
}
 
void DList::slotClearLineEditOplatabasket()
{
    kol = 0;
    kolsum = 0;
    priceSum = 0;
    priceSumSum = 0;
    ui->lineEditQuantity->clear();
    ui->lineEditLDSum->clear();
    this->close();
}
 
void DList::slotClearLineEditBacSpisokProduct()
{
    kol = 0;
    kolsum = 0;
    priceSum = 0;
    priceSumSum = 0;
    ui->lineEditQuantity->clear();
    ui->lineEditLDSum->clear();
}
 
void DList::slotClearLineEditLDPriceQuantityIsB(const QString &priceb, const QString &kolb)
{
    priceDel = priceb.toInt();
    kolDel = kolb.toInt();
    kolsum = kolsum - kolDel;
    ui->lineEditQuantity->setText(QString::number(kolsum));
 
    priceSumDel = priceDel * kolDel;
    priceSumSum = priceSumSum - priceSumDel;
    ui->lineEditLDSum->setText(QString::number(priceSumSum));
 
    qDebug() << "priceSumSum - LineEditPriceLD - (слот стр.2 - 111): " << ui->lineEditLDSum->displayText();
}
 
 
void DList::on_pushButtonDlBacProizvoditel_clicked()
{
 
    if (kol > 0){
 
        QMessageBox blistBacProizvoditel;
        blistBacProizvoditel.show();
 
        //удаляем обрамление и сервисные кнопки окна
        blistBacProizvoditel.setWindowFlags(Qt::FramelessWindowHint);
 
        blistBacProizvoditel.setWindowTitle(tr("ВОЗВРАТ К СПИСКУ ВЫБОРА ПРОИЗВОДИТЕЛЯ"));
        blistBacProizvoditel.setInformativeText("<span style='text-align: center;'><p style='font-size: 19pt; color: blue'><b>"
         "В КОРЗИНЕ НАХОДЯТСЯ ВЫБРАНЫЕ ВАМИ ТОВАРЫ!<span style='text-align: center'><p style='font-size: 19pt; color: blue'><b>"
                "ОТЧИСТИТЬ КОРЗИНУ ОТ ТОВАРОВ ИЛИ НЕТ?<b>");
        blistBacProizvoditel.resize(3500,500);
        blistBacProizvoditel.setStandardButtons(QMessageBox::No);
        blistBacProizvoditel.setButtonText(QMessageBox::No, tr("Нет"));
        blistBacProizvoditel.addButton(QMessageBox::Yes);
        blistBacProizvoditel.setDefaultButton(QMessageBox::Yes);
        blistBacProizvoditel.setButtonText(QMessageBox::Yes, tr("Да"));
        blistBacProizvoditel.setIcon(QMessageBox::Question);
        blistBacProizvoditel.setStyleSheet("QPushButton{min-width:475; min-height:150; font: bold 70px; color: blue;}");
          if(blistBacProizvoditel.exec() == QMessageBox::Yes){
              ui->lineEditQuantity->clear();
              ui->lineEditLDSum->clear();
              kol = 0;
              kolsum = 0;
              priceSum = 0;
              priceSumSum = 0;
              QSqlQuery clearReserveProductDlist;
              clearReserveProductDlist.exec("UPDATE Price SET DumpQuantity = 0"); //обнуляем резерв в таблице прайс
              emit ClearBasket();
              this->close();
 
              qDebug() << "Вернуться к списоку производителя и отчистить корзину?(слот стр.2 - 123): " << "Вернуться и отчистить корзину";
        }
              else {
 
              this->close();
 
              qDebug() << "Вернуться к списоку производителя и отчистить корзину?(слот стр.2 - 137): " << "Вернуться и не отчисчать корзину";
        }
   }
    else {
 
        this->close();
    }
}
 
void DList::showFierstWBasket()
{
    this->close();
}
 
void DList::receiveParameterProizvoditel(int id) //отображение товаров производителя
{
    QSqlQuery query;
    modelDQ = new ModelD;
    query.exec(QString::fromUtf8("SELECT IdProduct, NameProduct, Price, CurrentQuantity - DumpQuantity as balance, Foto, LogoBasket "
           "from SpisokProductR where balance > 0 and IdProizvoditel = ") + QString::number(id));
 
    modelDQ->setQuery(query);
    ui->tableViewD->setModel(modelDQ);
    ui->tableViewD->horizontalHeader()->setStretchLastSection(true);//растягиваем таблицу по до края справа
    modelDQ->setHeaderData(1, Qt::Horizontal, tr("НАИМЕНОВАНИЕ ТОВАРА"));
    modelDQ->setHeaderData(2, Qt::Horizontal, tr("ЦЕНА"));
    modelDQ->setHeaderData(3, Qt::Horizontal, tr("КОЛИЧЕСТВО НА СКЛАДЕ"));
    modelDQ->setHeaderData(4, Qt::Horizontal, tr("ФОТО"));
    modelDQ->insertColumn(5);
    modelDQ->setHeaderData(5, Qt::Horizontal, tr("ДОБАВИТЬ В КОРЗИНУ"));
    ui->tableViewD->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); //атоматическая ширина колонок по тексту
    ui->tableViewD->resizeColumnToContents(true);
 
    for (int i = 0; i < 200; i++){
    QModelIndex index = ui->tableViewD->model()->index(i, 5);
    QLabel *photo = new QLabel();
    photo->setAlignment(Qt::AlignCenter);
    photo->setPixmap(QPixmap("/home/home/Qt/MagR1/logoBasket.jpg"));
    ui->tableViewD->setIndexWidget(index, photo);
    }
    qDebug() << "modelDQ списка товаров(слот стр.2 - 189): " << modelDQ;
    ui->tableViewD->resizeRowsToContents(); //показываем картинку полностью
    ui->tableViewD->hideColumn(0);
    ui->tableViewD->show();
}
 
void DList::on_tableViewD_clicked(const QModelIndex &index)// выбор товара и передача дынных в диалог для добавления в корзину
{
        emit ParametrProductIdPD(modelDQ->data(modelDQ->index(ui->tableViewD->currentIndex().row(), 0)).toString());
        emit ParametrProductLD(modelDQ->data(modelDQ->index(ui->tableViewD->currentIndex().row(), 1)).toString());
        emit ParametrPriceQuantityLD(modelDQ->data(modelDQ->index(ui->tableViewD->currentIndex().row(), 2)).toString(),
                                     modelDQ->data(modelDQ->index(ui->tableViewD->currentIndex().row(), 3)).toString());
               qDebug() << "Индекс товара выбранного для добавления в корзину(слот стр.2 - 207): " << productId;
        qDebug() << "modelDQ списка передачи товара в корзину(слот стр.2 - 208): " << modelDQ;
 
        int row = index.row();
        int column = index.column();
        modelDQ->index(row, column);
        productId = modelDQ->record(row).value("IdProduct").toInt();
        emit ClickedDetailD(productId); //передаём данные в диалог
        dialogBasket->show();
 
}
 
void DList::on_pushButtonDBasket_clicked()
{
    emit ClickedDetailB(productId);
}
 
ModelD::ModelD()
{
 
}
 
QVariant ModelD::data(const QModelIndex &index, int role) const
{
 
    if (index.column() == 1  && role == Qt::TextAlignmentRole)
 {
     return Qt::AlignVCenter;
     return Qt::AlignLeft;
    }
  if  (role == Qt::TextAlignmentRole)
   {
      return Qt::AlignCenter;
      return QSqlQueryModel::data(index, role);
  }
 
         //колонка для фотографий
     if (index.column() == 4)
     {
         // не отображать изображение в виде текста
         if (role == Qt::DisplayRole)
 
             return QVariant();
 
         //sпоказать qpixmap в колонке
         if (role == Qt::DecorationRole)
         {
             QVariant variant(QSqlQueryModel::data(index, Qt::DisplayRole));
             QByteArray bytes(variant.toByteArray());
             QPixmap pixmap;
             pixmap.loadFromData(bytes);
             pixmap.cacheKey();
 
             return QPixmap(pixmap);
           }
     }
     return QSqlQueryModel::data(index, role);
}
Добавлено через 11 минут
dialogbasketproduct.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#ifndef DIALOGBASKETPRODUCT_H
#define DIALOGBASKETPRODUCT_H
 
#include <QDialog>
#include <QSqlQueryModel>
#include <QByteArray>
#include <QWidget>
#include <QTableWidget>
#include <QSqlRecord>
#include <QPushButton>
#include <QLineEdit>
#include <QMessageBox>
#include <QGridLayout>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QLineEdit>
#include <QSpinBox>
#include <QVector>
#include <QFont>
#include <QDial>
#include <QDialogButtonBox>
#include <QIcon>
#include <QDebug>
#include <QApplication>
#include <QtCore>
#include <QLibraryInfo>
#include <QtGui>
#include <QTranslator>
#include "basket.h"
#include "dlist.h"
 
#include <iostream>
#include <algorithm>
using namespace std;
 
class DList;
class Basket;
 
namespace Ui {
class DialogBasketProduct;
}
 
class DialogBasketProduct : public QDialog
{
    Q_OBJECT
 
public:
    explicit DialogBasketProduct(QWidget *parent = 0);
    ~DialogBasketProduct();
 
    int QuantitySqlProduct = 0;
    int spinKolSelect = 0;
    int spinKolReserve = 0;
    int spinKolV = 0;
    int spinKol = 0;
    int sumPrice = 0;
 
    vector <int> productIdsDialog;
    vector <int> producAndReserv;
 
public slots:
 
    void receiveParameterProductDialog(const QString &currenttext);
 
    void receiveParameterPriceQuantityDialog(const QString &currenttextP, const QString &currenttextSB);
 
    void receiveParameterIdPD(const QString &currenttext);
 
    void receiveParameterDetailDialog(int id);
 
    void deleteProdB();
 
private slots:
 
    void on_pushButtonCancel_clicked();
 
    void on_pushButtonYes_clicked();
 
    void on_pushButtonYes_released();
 
    void ClearBasketDialogOplataBasket();
 
    void ClearBasketDialogBacSpisokProduct();
 
    void receiveDBPriceQuantityBIsB(const QString &priceb, const QString &kolb);
 
    void BasketDeletProduct();
 
    void on_spinBoxProduct_valueChanged(int arg1);
 
signals:
    void ParametrSpinBoxPriceDialog(const QString &nameSB, const QString &nameP);
 
    void ClearDialogBasket();
    void ClearDlistIsBasketOplataBasket();
    void ClearDlistIsBasketBacSpProduct();
    void ClickedDetailDialog (int i);
    void spinBoxYes(int i);
    void ClearDBPPriceQuantityIsB(const QString &priceb, const QString &kolb);
 
private:
    Ui::DialogBasketProduct *ui;
    Basket *basketD;
 
};
 
#endif // DIALOGBASKETPRODUCT_H
dialogbasketproduct.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
#include "dialogbasketproduct.h"
#include "ui_dialogbasketproduct.h"
 
#include <QApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QTableView>
#include <QSqlError>
#include <QString>
#include <QtGui>
#include <QtSql>
#include <QSqlField>
#include <QSqlRecord>
#include <QWidget>
#include <QDialog>
#include <QLabel>
#include <QSpinBox>
#include <QLayout>
#include <QLineEdit>
#include <QPushButton>
#include <QVector>
#include "dlist.h"
#include "basket.h"
 
#include <iostream>
#include <algorithm>
using namespace std;
 
class Basket;
 
DialogBasketProduct::DialogBasketProduct(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::DialogBasketProduct)
{
    ui->setupUi(this);
    basketD = new Basket();
 
 
    //Не отображаем поле setWindowTitle обрамление и сервисные кнопки диалогового окна (свернуть, развернуть, закрыть)
    this->setWindowFlags(Qt::WindowTitleHint | Qt::WindowTitleHint | Qt::CustomizeWindowHint | Qt::FramelessWindowHint);
   //  this->setWindowTitle("ДОБАВЛЕНИЕ ТОВАРОВ В КОРЗИНУ");
    ui->spinBoxProduct->setStyleSheet("QSpinBox::up-button   { width: 80px; height: 60px; } \n"
                           "QSpinBox::down-button { width: 80px; height: 60px; } \n"
                           "QSpinBox              { height: 160px;             } \n"
                           "QSpinBox              { background-color: rgb(255, 251, 251);} \n"
                           "QSpinBox              { font-size: 65pt;           }\n"
                           );
 
    ui->lineEditProduct->setMinimumSize(300, 50);
    ui->lineEditProduct->setStyleSheet("QLineEdit {font: bold 23px}\n"
                                       "QLineEdit {background-color: rgb(255, 251, 251);}\n");
 
    ui->lineEditPriceProduct->setMinimumSize(300, 50);
    ui->lineEditPriceProduct->setStyleSheet("QLineEdit {font: bold 43px}\n"
                                            "QLineEdit {background-color: rgb(255, 251, 251);}\n");
 
    ui->pushButtonYes->setStyleSheet("QPushButton:: {border-radius: 30px;} \n"
                                     "QPushButton:: {background-color: rgb(211, 215, 207));} \n");
    ui->pushButtonCancel->setStyleSheet("QPushButton:: {border-radius: 30px;} \n"
                                        "QPushButton:: {background-color: rgb(211, 215, 207));} \n");
 
    connect(this, SIGNAL(ClickedDetailDialog(int)), basketD, SLOT(receiveParameterDetail(int)));
    connect(this, SIGNAL(ClearDialogBasket()), basketD, SLOT(ClikedDlClearBasket()));
    connect(this, SIGNAL(ClearDlistIsBasketBacSpProduct()), basketD, SLOT(ClikedDlClearBasket()));
    connect(basketD, SIGNAL(ClikedClearLineEditOplata()), SLOT(ClearBasketDialogOplataBasket()));
    connect(basketD, SIGNAL(ClikedClearLineEditBacSpisokProduct()), SLOT(ClearBasketDialogBacSpisokProduct()));
    connect(basketD, SIGNAL(ClicedModel()), SLOT(ClearBasketDialogBacSpisokProduct()));
    connect(basketD, SIGNAL(ClikedClearLineEditDLBIsPriceQuantity(QString,QString)), SLOT(receiveDBPriceQuantityBIsB(QString,QString)));
   
}
 
DialogBasketProduct::~DialogBasketProduct()
{
    delete ui;
}
 
void DialogBasketProduct::receiveParameterProductDialog(const QString &currenttext)
{
    ui->lineEditProduct->setText(currenttext);
}
 
void DialogBasketProduct::receiveParameterPriceQuantityDialog(const QString &currenttextP, const QString &currenttextSB)
{
    spinKol = ui->spinBoxProduct->value();
    sumPrice = ui->lineEditPriceProduct->text().toInt();
    ui->lineEditPriceProduct->setText(currenttextP);
 
    ui->lineEditQuantitySql->setText(currenttextSB);
}
 
void DialogBasketProduct::receiveParameterIdPD(const QString &currenttext)
{
    ui->lineEditIdproductDialog->setText(currenttext);
}
 
 
void DialogBasketProduct::receiveParameterDetailDialog(int id)
{
    this->productIdsDialog.push_back(id);
    qDebug() << "Индекс выбранного товара для добавления в диалог(слот стр. 3 - 101): " << productIdsDialog << endl;
 
    QString query = "SELECT IdProduct, NameProduct FROM SpisokProductR WHERE IdProduct IN (";
    for (int i = 0; i < this->productIdsDialog.size(); i++) {
         query += (i ? "," : "");
        query += QString::number(this->productIdsDialog[i]);
//        if (i < this->productIdsDialog.size() - 1) {
//       }
 
    }
    query += ")";
 
    cout << "void DialogBasketProduct::receiveParameterDetailDialog(int id)(стр. 3 - 101):  " << id << endl;
 
}
 
void DialogBasketProduct::on_pushButtonYes_clicked()
{
 
    emit ParametrSpinBoxPriceDialog(ui->spinBoxProduct->text(), ui->lineEditPriceProduct->text());
 
    qDebug() << "Количество товара добавляемого в корзину?(слот стр.3 - 142): " << ui->spinBoxProduct->text();
 
 
    QSqlQuery queryReserveProduct;
    queryReserveProduct.prepare("UPDATE Price SET DumpQuantity=:d WHERE IdProduct=:id");
    queryReserveProduct.bindValue(":d", ui->spinBoxProduct->value());
    queryReserveProduct.bindValue(":id", ui->lineEditIdproductDialog->text().toInt());
 
        if(!queryReserveProduct.exec()){
             qDebug() << "queryReserveProduct: " << "Не возможно произвести запись";
           }
    qDebug() << "Вносим в базу запись о резерве IdProducta/spinKolReserve(слот стр.3 - 148): "
             <<ui->lineEditIdproductDialog->text().toInt()<<" / "<<  ui->spinBoxProduct->value();
    emit ClickedDetailDialog(ui->lineEditIdproductDialog->text().toInt());
 
    qDebug() << "Добавить в корзину индекс товара и количество резерва?(слот стр.3 - 157): " << "Да добавить";
 
    this->close();
}
 
void DialogBasketProduct::on_pushButtonYes_released()
{
    basketD->show();
    //basketDialog->;
}
 
void DialogBasketProduct::on_pushButtonCancel_clicked()
{
 
    this->close();
    qDebug() << "Добавить выбранный индекс товара в корзину?(слот стр.3 - 183): " << "Нет не добавлять";
}
 
void DialogBasketProduct::ClearBasketDialogOplataBasket()
{
    emit ClearDialogBasket();
    emit ClearDlistIsBasketOplataBasket();
}
 
void DialogBasketProduct::ClearBasketDialogBacSpisokProduct()
{
    emit ClearDialogBasket();
    emit ClearDlistIsBasketBacSpProduct();
}
 
void DialogBasketProduct::BasketDeletProduct()
{
 
}
 
void DialogBasketProduct::receiveDBPriceQuantityBIsB(const QString &priceb, const QString &kolb)
{
    emit ClearDBPPriceQuantityIsB(priceb, kolb);
}
 
void DialogBasketProduct::on_spinBoxProduct_valueChanged(int arg1)
{
    spinKolSelect = ui->lineEditQuantitySql->text().toInt();
    ui->spinBoxProduct->setRange(1, spinKolSelect);
    spinKolReserve = ui->spinBoxProduct->value();
 
    qDebug() << "on_spinBoxProduct_valueChanged(int arg1)(слот стр.3 - 203): " << spinKolReserve;
}
 
void DialogBasketProduct::deleteProdB()
{
    productIdsDialog.size();
    productIdsDialog.empty();
    productIdsDialog.clear();
}
0
 Аватар для Ruslan7777777
7 / 6 / 1
Регистрация: 15.11.2019
Сообщений: 75
24.06.2020, 21:22  [ТС]
basket.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#ifndef BASKET_H
#define BASKET_H
 
#include <QWidget>
#include <QTableWidget>
#include <QSqlRecord>
#include <QSqlDatabase>
#include <QSqlQueryModel>
#include <QSqlTableModel>
#include <QStandardItemModel>
#include <QApplication>
#include <QTableView>
#include <QSpinBox>
#include <QVector>
#include <QtGui>
#include <QtCore>
#include <QItemDelegate>
#include <QStandardItemModel>
#include <QSqlRelationalTableModel>
#include <QSqlRelationalDelegate>
#include <QModelIndex>
#include <QStyledItemDelegate>
#include <QHeaderView>
#include <QStyleOptionViewItem>
#include "dlist.h"
#include "dialogbasketproduct.h"
#include "delegate.h"
 
#include <iostream>
#include <algorithm>
using namespace std;
 
class DList;
class DialogBasketProduct;
class Delegate;
 
namespace Ui {
class Basket;
}
 
class Basket : public QTableView
{
    Q_OBJECT
 
public:
  
    explicit Basket(QWidget *parent = nullptr);
    ~Basket();
 
    /**
     * @brief productIds -- Идентификаторы продуктов в корзине
     */
    vector<int> productIds;
 
public slots:
    void ClikedDlClearBasket();
 
private slots:
    void receiveParameterDetail(int id);
 
    void on_pushButtonBasketBac_clicked();
 
    void on_pushButton_Oplata_clicked();
 
    void on_tableViewBasket_clicked(const QModelIndex &index);
 
signals:
    void ClikedClearLineEditOplata();
    void ClikedClearLineEditBacSpisokProduct();
    void ClikedShowFierstW();
    void ClicedModel();
    void ClikedClearLineEditDLBIsPriceQuantity(const QString &priceb, const QString &kolb);
 
 
private:
    Ui::Basket *ui;
    QSqlQueryModel *modelB;
 
 
};
 
class ModelB : public QSqlTableModel
{
    Q_OBJECT
public:
    ModelB();
    QVariant data(const QModelIndex &index, int role) const;
 
};
 
#endif // BASKET_H
basket.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
#include "basket.h"
#include "ui_basket.h"
 
#include <QWidget>
#include <QSqlQueryModel>
#include <QSqlRecord>
#include <QSqlQuery>
#include <QSqlDatabase>
#include <QApplication>
#include <QTableView>
#include <QPushButton>
#include <QMessageBox>
#include <QSpinBox>
#include <QDebug>
#include <QSize>
#include <utility>
#include <QFont>
#include <QShowEvent>
#include <QLineEdit>
#include <QVector>
#include <QItemDelegate>
#include <qstring.h>
#include <QHeaderView>
#include <QPixmap>
#include <QList>
#include <QModelIndex>
#include <QLabel>
#include <QAbstractItemModel>
#include <QtCore>
#include <QFile>
#include <QVariant>
#include <QObject>
#include <QtGui>
#include <QStandardItemModel>
#include <QStyledItemDelegate>
#include <QStyleOptionViewItem>
#include "delegate.h"
 
#include <iostream>
#include <algorithm>
using namespace std;
 
class DList;
class SpinBoxDelegate;
 
 
Basket::Basket(QWidget *parent) : QTableView(parent),
    ui(new Ui::Basket)
{
    ui->setupUi(this);
    modelB = new QSqlQueryModel();
    //my_delegate = new Delegate();
    
Basket::~Basket()
{
    delete ui;
}
 
void Basket::ClikedDlClearBasket()
{
    productIds.clear();
    modelB->clear();
    this->close();
}
 
void Basket::receiveParameterDetail(int id)
{
    this->productIds.push_back(id);
  //  cout << "id: " << id << endl;
 
    QString query = "SELECT IdProduct, NameProduct, Price, DumpQuantity, Foto FROM SpisokProductR where IdProduct IN (";
    for (int i = 0; i < this->productIds.size(); i++) {
        query += (i ? "," : "");//если i? т.с = 0 далее = , если не = 0 т.е i!?, "" - ничего пустой символ
        query += QString::number(this->productIds[i]);
//        if (i < this->productIds.size() - 1) {
 
//        }
 
        cout << "Индекс добавленного товара в корзину(слот стр.4 - 69):  " << productIds [i] << endl;
    }
    query += ")";
 
    modelB = new ModelB;
    modelB->setQuery(query);
    ui->tableViewBasket->setModel(modelB);
    modelB->setHeaderData(1, Qt::Horizontal, tr("НАИМЕНОВАНИЕ ТОВАРА В КОРЗИНЕ"));
    modelB->setHeaderData(2, Qt::Horizontal, tr("ЦЕНА"));
    modelB->setHeaderData(3, Qt::Horizontal, tr("КОЛИЧЕСТВО ТОВАРА")/*, Qt::EditRole*/);
    modelB->setHeaderData(4, Qt::Horizontal, tr("ФОТО"));
    modelB->insertColumn(5);
    modelB->setHeaderData(5, Qt::Horizontal, tr("УДАЛИТЬ ТОВАР"));
    ui->tableViewBasket->horizontalHeader()->setStretchLastSection(true);
 
    for (int i = 0; i < 200; i++){
        QModelIndex index = ui->tableViewBasket->model()->index(i, 5);
        QLabel *photo = new QLabel();
        photo->setAlignment(Qt::AlignCenter);
        photo->setPixmap(QPixmap("/home/home/Qt/MagR1/Foto/deleteproduct.jpg"));
        ui->tableViewBasket->setIndexWidget(index, photo);
    }
 
    ui->tableViewBasket->setEditTriggers(QAbstractItemView::AllEditTriggers);
    ui->tableViewBasket->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); //атоматическая ширина колонок по тексту
    ui->tableViewBasket->resizeColumnToContents(true);
    ui->tableViewBasket->resizeRowsToContents();
    ui->tableViewBasket->hideColumn(0);
    //ui->tableViewBasket->showRow(id);
   // ui->tableViewBasket->setItemDelegateForColumn(3, new Delegate(Qt::AlignCenter));
 
    qDebug() << "modelB товаров в корзине (слот стр.4 - 114): " << modelB;
 
 
    this->close();
}
 
void Basket::on_pushButtonBasketBac_clicked()
{
    if (productIds.size() > 0){
 
     QMessageBox BasketBac;
     BasketBac.show();
 
     //удаляем обрамление и сервисные кнопки окна
     BasketBac.setWindowFlags(Qt::FramelessWindowHint);
 
     BasketBac.setWindowTitle(tr("ВОЗВРАТ К СПИСКУ ПОДБОРА ТОВАРОВ"));
     BasketBac.setInformativeText("<span style='text-align: center'><p style='font-size: 19pt; color: blue'><b>"
           "В КОРЗИНЕ НАХОДЯТСЯ ВЫБРАНЫЕ ВАМИ ТОВАРЫ!<span style='text-align: center'><p style='font-size: 19pt; color: blue'><b> "
                  "ОТЧИСТИТЬ КОРЗИНУ ОТ ТОВАРОВ ИЛИ НЕТ?<b>");
 
     BasketBac.resize(3500,500);
     BasketBac.setStandardButtons(QMessageBox::No);
     BasketBac.setButtonText(QMessageBox::No, tr("Нет"));
     BasketBac.addButton(QMessageBox::Yes);
     BasketBac.setDefaultButton(QMessageBox::Yes);
     BasketBac.setButtonText(QMessageBox::Yes, tr("Да"));
     BasketBac.setStyleSheet("QPushButton{min-width:475; min-height:150; font: bold 70px; color: blue; }");
     BasketBac.setIcon(QMessageBox::Question);
     if(BasketBac.exec() == QMessageBox::Yes){
         QSqlQuery clearReserveProductBascet;
         clearReserveProductBascet.exec("UPDATE Price SET DumpQuantity = 0"); //обнуляем резерв в таблице прайс
         productIds.clear();
         modelB->clear();
         emit ClikedClearLineEditBacSpisokProduct();
         this->close();
 
        qDebug() << "Вернуться к списоку товаров и отчистить корзину?(слот стр.4 - 151): " << "Вернуться и отчистить корзину";
        }
     else {
         this->close();
           qDebug() << "Вернуться к списоку товаров и отчистить корзину?(слот стр.4 - 155): " << "Вернуться и не отчисчать корзину";
   }
}
    else{
        this->close();
    }
}
 
void Basket::on_tableViewBasket_clicked(const QModelIndex &index)
{
    if (index.column() == 5){
 
     QMessageBox deleteProduct;
     deleteProduct.show();
 
     //удаляем обрамление и сервисные кнопки окна
     deleteProduct.setWindowFlags(Qt::FramelessWindowHint);
 
     deleteProduct.setWindowTitle(tr("УДАЛЕНИЕ ТОВАРА ИЗ КОРЗИНЫ"));
     deleteProduct.setInformativeText("<span style='text-align: center'><p style='font-size: 18pt; color: blue'><b>"
           "ВЫ ХОТИТЕ УДАЛИТЬ ВЫБРАННЫЙ ТОВАР ИЗ КОРЗИНЫ?<span style='text-align: center'><p style='font-size: 19pt; color: blue'><b> "
                  "ДА ИЛИ НЕТ?<b>");
 
     deleteProduct.resize(3500,500);
     deleteProduct.setStandardButtons(QMessageBox::No);
     deleteProduct.setButtonText(QMessageBox::No, tr("Нет"));
     deleteProduct.addButton(QMessageBox::Yes);
     deleteProduct.setDefaultButton(QMessageBox::Yes);
     deleteProduct.setButtonText(QMessageBox::Yes, tr("Да"));
     deleteProduct.setStyleSheet("QPushButton{min-width:475; min-height:150; font: bold 70px; color: blue; }");
     deleteProduct.setIcon(QMessageBox::Question);
     if(deleteProduct.exec() == QMessageBox::Yes){
         int r = modelB->data(modelB->index(ui->tableViewBasket->currentIndex().row(), 0)).toInt();
 
         qDebug() << "r(слот стр.4 - 186): " << r;
 
//          ui->tableViewBasket->setRowHidden(index.row(), true);
         std::vector<int>::iterator it = productIds.begin();
         for(int i = 0; i < productIds.size(); i++, it++)
         {
             if (productIds.at(i) == r)
             {
                 qDebug() << "r(слот стр.4 - 193): " << productIds.at(i);
                 it = productIds.erase(it);
 
                 int rv = index.row();
                 qDebug() << "index.row() - (слот стр.4 - 205): " << rv;
                 modelB->removeRow(rv, QModelIndex());
                 //ui->tableViewBasket->hideRow(rv);
                 QSqlQuery query;
 
                 emit ClikedClearLineEditDLBIsPriceQuantity(modelB->data(modelB->index(ui->tableViewBasket->currentIndex().row(), 2)).toString(),
                                                    modelB->data(modelB->index(ui->tableViewBasket->currentIndex().row(), 3)).toString());
 
                 modelB->submit();
                 modelB->query();
 
 
 
                 //productIds.shrink_to_fit();
 
                // ui->tableViewBasket->deleteLater();destroyed();
 
                 qDebug() << "Индекс товара выбранного для удаления из корзины(слот стр.4 - 197): " << productIds;
                 qDebug() << "modelB после удаления товара(слот стр.4 - 198): " << modelB;
                 qDebug() << "Удалить товар из корзины - (слот стр.4 - 199)?: " << "Да";
                 qDebug() << "std::vector<int> после удаления товара - (слот стр.4 - 200): " << productIds << endl;
             }
 
         }
 
//         for(;it != productIds.end();++it )
//         {
//             if(r == it)
//             {
//             }
//         }
//         if (it != productIds.end()) {
//             it = productIds.erase(it); // after erasing, 'it' will be set to the next element in v
//             productIds.shrink_to_fit();
//             ui->tableViewBasket->setRowHidden(index.row(), true);
 
             //it++;
//             qDebug() << "Индекс товара выбранного для удаления из корзины(слот стр.4 - 184): " << productIds;
//             qDebug() << "modelB после удаления товара(слот стр.4 - 184): " << modelB;
//             qDebug() << "Удалить товар из корзины - (слот стр.4 - 184)?: " << "Да";
//             qDebug() << "std::vector<int> после удаления товара - (слот стр.4 - 184): " << productIds << endl;
//            }
//         else{
//             //++it;
//             qDebug() << "Индекс товара выбранного для удаления - (слот стр.4 - 201): " << productIds;
//             qDebug() << "modelB при отказе от удаления товара - (слот стр.4 - 201): " << modelB;
//             qDebug() << "Удалять товар из корзины - (слот стр.4 - 201): " << "Нет";
//             qDebug() << "std::vector<int> после удаления последнего товара - (слот стр.4 - 201): " << productIds << endl;
//         }
 
         if(productIds.size() < 1){
             //std::vector<int>().swap(productIds);
             productIds.clear();
             productIds.shrink_to_fit();
             modelB->clear();
             emit ClikedClearLineEditBacSpisokProduct();
             this->close();
             qDebug() << "Индекс последнего товара - (слот стр.4 - 201): " << index.row();
             qDebug() << "modelB последнего товара - (слот стр.4 - 201): " << modelB;
             qDebug() << "Удалять последний товар из корзины - (слот стр.4 - 201): " << "Да";
             qDebug() << "std::vector<int> после удаления последнего - (слот стр.4 - 201): " << productIds << endl;
         }
         else{
             qDebug() << "Индекс выбранного последнего товара - (слот стр.4 - 242): " << productIds;
             qDebug() << "modelB при удалении последнего товара - (слот стр.4 - 243): " << modelB;
             qDebug() << "Удалять последний товар из корзины - (слот стр.4 - 244): " << "Нет";
             qDebug() << "std::vector<int>при отказе удалить последний - (слот стр.4 - 245): " << productIds << endl;
 
         }
      }
     else{
         int rv = index.row();
         qDebug() << "index.row() - (слот стр.4 - 272): " << rv;
 
         qDebug() << "Индекс товара выбранного для удаления - (слот стр.4 - 251): " << index;
         qDebug() << "modelB при отказе от удаления товара - (слот стр.4 - 252): " << modelB << endl;
         qDebug() << "Удалять товар из корзины - (слот стр.4 - 253): " << "Нет";
         qDebug() << "std::vector<int> после удаления последнего товара - (слот стр.4 - 254): " << productIds << endl;
     }
    }
}
 
//void Basket::rowCountChanged(int oldCount, int newCount)
//{
//    emit delP(oldCount, newCount);
 
//}
 
void Basket::on_pushButton_Oplata_clicked()
{
    if (productIds.size() == 0){
        this->close();
    }
 
    if (productIds.size() > 0){
 
     QMessageBox oplataBox;
     oplataBox.show();
 
     //удаляем обрамление и сервисные кнопки окна
     oplataBox.setWindowFlags(Qt::FramelessWindowHint);
 
     oplataBox.setWindowTitle(tr("ВЫБОР СПОСОБА ОПЛАТЫ ТОВАРОВ"));
     oplataBox.setInformativeText("<span style='text-align: center'><p style='font-size: 21pt; color: blue'><b>"
    "ВЫБИРИТЕ СПОСОБ ОПЛАТЫ ТОВАРОВ НАЛИЧНЫМИ ИЛИ КАРТОЙ?<span style='text-align: center'><p style='font-size: 21pt; color: blue'><b> "
                "ЛИБО НАЖМИТЕ - ОТМЕНА!<b>");
 
     oplataBox.resize(4500,500);
     oplataBox.setStandardButtons(QMessageBox::No);
     oplataBox.setButtonText(QMessageBox::No, tr("НАЛИЧНЫЕ"));
     oplataBox.setStyleSheet("QPushButton{max-width:600; min-height:150; font: bold 45px; color: blue; }");
     oplataBox.addButton(QMessageBox::Yes);
     oplataBox.setDefaultButton(QMessageBox::Yes);
     oplataBox.setButtonText(QMessageBox::Yes, tr("КАРТА"));
     oplataBox.setStyleSheet("QPushButton{max-width:600; min-height:150; font: bold 60px; color: blue; }");
     oplataBox.addButton(QMessageBox::Cancel);
     oplataBox.setDefaultButton(QMessageBox::Cancel);
     oplataBox.setButtonText(QMessageBox::Cancel, tr("ОТМЕНА"));
     oplataBox.setStyleSheet("QPushButton{max-width:600; min-height:150; font: bold 60px; color: blue; }");
     oplataBox.setIcon(QMessageBox::Question);
     int dlg_rsz = oplataBox.exec();
     if( dlg_rsz == QMessageBox::Yes){
          modelB->clear();
          productIds.clear();
          this->close();
          emit ClikedClearLineEditOplata();
 
     qDebug() << "Оплачивать товар(слот стр.4 - 298): " << "КАРТОЙ";
     }
 
   else if(dlg_rsz == QMessageBox::No){
          productIds.clear();
          modelB->clear();
          this->close();
          emit ClikedClearLineEditOplata();
 
     qDebug() << "Оплачивать товар(слот стр.4 - 307): " << "НАЛИЧНЫМИ";
     }
 
     else if(dlg_rsz == QMessageBox::Cancel){
 
     qDebug() << "Оплачивать товар(слот стр.4 - 312): " << "Нет, не оплачивать";
     }
   }
}
 
ModelB::ModelB()
{
 
}
 
QVariant ModelB::data(const QModelIndex &index, int role) const
{
    if (index.column() == 1  && role == Qt::TextAlignmentRole)
    {
        return Qt::AlignVCenter;
        return Qt::AlignLeft;
    }
    if  (role == Qt::TextAlignmentRole)
    {
        return Qt::AlignCenter;
        return QSqlQueryModel::data(index, role);
    }
 
    // Colomun for immage
    if (index.column() == 4)
    {
        // avoid showing image as text
        if (role == Qt::DisplayRole || role == Qt::EditRole)
            return QVariant();
        //show the qpixmap in the colomun
        if (role == Qt::DecorationRole)
        {
            QVariant variant(QSqlQueryModel::data(index, Qt::DisplayRole));
            QByteArray bytes(variant.toByteArray());
            QPixmap pixmap;
            pixmap.loadFromData(bytes, "Foto");
            return pixmap;
        }
    }
 
    return QSqlQueryModel::data(index, role);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.06.2020, 21:22
Помогаю со студенческими работами здесь

Отображение в QListView данных модели
Доброго времени суток! http://s50.***********/i130/1106/17/8d09bfcded08.png Имеются объекты классов QListView и QTreeView. Оба...

Отображение модели с измененным типом данных
Как изменить тип данных (необходимо добавить несколько литер к целому значению для отображения в удобочитаемой форме) значения модели базы...

Отображение логической модели предметной области в структуру базы данных
Отображение логической модели предметной области в структуру базы данных. Как ответить на такой вопрос?????

Редактирование данных через QSqlQueryModel+tableView
Все добра! Необходимо отобразить в tableview и редактировать данные из нескольких таблиц. Как понимаю это можно сделать только...

Обновление данных при их изменении (QSqlQuery и QSqlQueryModel)
Помогите, пожалуйста. Подключаюсь к базе данных, формирую запрос с использованием класса QSqlQueryModel. Данные отображаются в табличном...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru