В общем, имеется класс, который используется для представления меню ввода данных в таблицу БД. Число столбцов заранее неизвестно. Необходимо, при нажатии кнопки "Принять" внести введённые в поля ввода пользователем данные в таблицу базы данных. Каким образом разумнее всего было бы это сделать?
#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);
}