Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Somni от Ноябрь 05, 2018, 15:33



Название: Множественный выбор
Отправлено: Somni от Ноябрь 05, 2018, 15:33
Всем привет!
Нужно выбрать несколько лекарств из предложенного списка и их добавить в заказ (n insert into в таблицу состав заказа, где n количество выбранных лекарств). Список лекарств предоставляется выборкой из БД. Я сделал выборку в listView. Сделал сбор полученных данных, но получается забрать только последний выбранный препарат из listView. А мне нужно, чтобы пользователь мог выбрать сразу несколько, а не один, препарат. Может что иное использовать нежели listView. Препаратов в списке может быть штук 500, нужно компактно вывести с лифтом и предоставить возможность множественного выбора. Потом это нужно прочитать и передать мне в код строки, кои пользователь выбрал и нажал кнопку добавить в корзину.
Спасибо за ответы!

Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "pharmacy_orders.h"
#include <QtSql>
#include <QStandardItemModel>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QSqlQuery query;
    query.exec("SELECT Название FROM Лекарства");
    QStringList sequence_len;
    QStandardItemModel *model = new QStandardItemModel;//новая модель списка
    QStandardItem *item;//элемент списка
    while (query.next())
    {
        item = new QStandardItem(query.value(0).toString());
        model->appendRow(item);
    }
    //Cоединение модели списка с конкретным списком
    ui->listView->setModel(model);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    QString Result;//Итоговый результат

        QModelIndexList selectedIndexes = ui->listView->selectionModel()->selectedIndexes();
        QStringList selectedTexts;//в теории может быть несколько выделенных пунктов списка

        //пробегаем по всем элементам списка
        foreach(const QModelIndex &idx, selectedIndexes)
        {
            selectedTexts << idx.data(Qt::DisplayRole).toString();//выдергиваем наименования значений списка
        }

        Result=selectedTexts.join(',');//соединяем все найденные элементы

        //используем результат
        qDebug() << Result;
    /*
    Pharmacy_orders po;
    po.setModal(true);
    po.exec();
    */
}


Название: Re: Множественный выбор
Отправлено: __Heaven__ от Ноябрь 05, 2018, 17:27
Если хочется добавить несколько строк в 1 запросе, то это, вроде как делается через обособление
Код:
insert into table (column)
values
(val1),
(val2),
(val3)
http://www.sqlitetutorial.net/sqlite-insert/


Название: Re: Множественный выбор
Отправлено: Somni от Ноябрь 05, 2018, 18:11
Мне это известно, INSERT INTO ... VALUES ... Но чтобы добавить несколько строк, для них нужно подготовить информацию, в частности - ответ пользователя, какие лекарства идут в корзину и в каком количестве. Это у меня на данный момент не получилось исполнить в кодовом представлении.


Название: Re: Множественный выбор
Отправлено: __Heaven__ от Ноябрь 06, 2018, 11:35
Я понял, что уже всё почти готово
Код
C++ (Qt)
Result=selectedTexts.join(',');//соединяем все найденные элементы
 
Достаточно привести в удобный для запроса вид:
Код
C++ (Qt)
SQL = "insert into table (column) values ('" + selectedTexts.join("'), ('") + "')";