Russian Qt Forum
Ноябрь 22, 2024, 23:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Считать текст из QLineEdit'ов и записать в соотв. поля таблицы  (Прочитано 4238 раз)
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);


}

Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Ноябрь 18, 2015, 09:21 »

Эммм, не в тему, а для чего использовать матрицу QLineEdit, если есть таблицы (QTableWidget, QTableView)?
А QTableView может с sql-моделями работать...
Записан

gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #2 : Ноябрь 18, 2015, 09:31 »

Посмотрите QSqlQueryModel::setQuery и QSqlQuery

Пример вставки:
Код
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();
 
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.119 секунд. Запросов: 22.