Russian Qt Forum

Qt => Базы данных => Тема начата: codenameRazuka от Ноябрь 17, 2015, 23:21



Название: Считать текст из QLineEdit'ов и записать в соотв. поля таблицы
Отправлено: codenameRazuka от Ноябрь 17, 2015, 23:21
В общем, имеется класс, который используется для представления меню ввода данных в таблицу БД. Число столбцов заранее неизвестно. Необходимо, при нажатии кнопки "Принять" внести введённые в поля ввода пользователем данные в таблицу базы данных. Каким образом разумнее всего было бы это сделать?

Код:
#include <QDialog>
#include <QLineEdit>
#include <QSqlTableModel>

class InsertRecordDialog: public QDialog
{
    Q_OBJECT

private:
    QLineEdit **columns;
    QPushButton *admitButton;
    QPushButton *cancelButton;

public:
    InsertRecordDialog(QWidget* parent, QSqlQueryModel* model);

private slots:
    void admit();

};

Код:
#include "insertrecorddialog.h"
#include <QLabel>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QPushButton>

InsertRecordDialog::InsertRecordDialog(QWidget* parent = 0, QSqlQueryModel* model = 0)
    : QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint)
{
    int n = model->columnCount();

    columns = new QLineEdit*[n];
    for (int i = 0; i < n; i++)
    {
        columns[i]=new QLineEdit(this);
    }

    admitButton = new QPushButton(QObject::tr("Принять"));
    cancelButton = new QPushButton(QObject::tr("Отмена"));

    QObject::connect(cancelButton, SIGNAL(clicked()), this, SLOT(close()));

    QLabel **labels = new QLabel*[n];
    for (int i = 0; i < n; i++)
    {
        labels[i]=new QLabel(this);
        labels[i]->setText(model->headerData(i,Qt::Horizontal).toString());
    }

    QVBoxLayout *mainLayout = new QVBoxLayout;

    QVBoxLayout *leftLayout = new QVBoxLayout;
    for (int i = 0; i < n; i++)
    {
        leftLayout->addWidget(labels[i]);
    }

    QVBoxLayout *rightLayout = new QVBoxLayout;
    for (int i = 0; i < n; i++)
    {
        rightLayout->addWidget(columns[i]);
    }

    QHBoxLayout *topLayout = new QHBoxLayout;

    topLayout->addLayout(leftLayout);
    topLayout->addLayout(rightLayout);

    QHBoxLayout *bottomLayout = new QHBoxLayout;
    bottomLayout->addWidget(admitButton);
    bottomLayout->addWidget(cancelButton);

    mainLayout->addLayout(topLayout);
    mainLayout->addLayout(bottomLayout);

    this->setLayout(mainLayout);


}



Название: Re: Считать текст из QLineEdit'ов и записать в соотв. поля таблицы
Отправлено: gil9red от Ноябрь 18, 2015, 09:21
Эммм, не в тему, а для чего использовать матрицу QLineEdit, если есть таблицы (QTableWidget, QTableView)?
А QTableView может с sql-моделями работать (http://doc.qt.io/qt-4.8/sql-model.html)...


Название: Re: Считать текст из QLineEdit'ов и записать в соотв. поля таблицы
Отправлено: gil9red от Ноябрь 18, 2015, 09:31
Посмотрите QSqlQueryModel::setQuery и QSqlQuery (http://doc.qt.io/qt-5/qsqlquery.html#details)

Пример вставки:
Код
C++ (Qt)
   QSqlQuery query;
   query.prepare("INSERT INTO person (id, forename, surname) "
                 "VALUES (:id, :forename, :surname)");
   query.bindValue(":id", 1001);
   query.bindValue(":forename", "Bart");
   query.bindValue(":surname", "Simpson");
   query.exec();