Есть такой класс на диалоге, для обслуживания динам-х форм.
#ifndef FPFORM_H
#define FPFORM_H
#include <QtGui>
#include <QFlags>
#include <QDialog>
#include <QVector>
#include <QBitArray>
#include <QWidget>
#include "domitem.h"
#include "dommodel.h"
#include "mdichild.h"
// "Лишнее" удалено !!!
class fpForm : public QDialog
{
Q_OBJECT
public:
fpForm(DomItem *item, MdiChild *parent = 0, Qt::WindowFlags f = 0);
~fpForm();
void preview();
bool initForm(int fpFlags = 0, int fpCmd = 0); // Q_INVOKABLE
void setExtModel(QSqlTableModel *extmodel);
protected:
bool createView();
bool isWContainer(QObject *wo);
void closeEvent(QCloseEvent *event);
void keyPressEvent ( QKeyEvent * event );
void parseForm(QObject *wo);
bool loadForm(DomItem *item = 0);
private:
QTableView *view; // Если есть, тогда Список, иначе Форма
fpForm *DlgForm; // Форма редактирования записи
QSqlTableModel *model;
QDataWidgetMapper *mapper;
QWidget *formUI;
MdiChild *MdiParent;
QVector<QObject *> formWidgets;
};
#endif // FPFORM_H
Есть 2 объекта этого класса, загруженных динамически последовательно,
но первый это список, т.е. таблица из БД, а второй форма редактирования
выбранной записи, которая находится в указателе *DlgForm.
В смысле загруженная Форма в указателе ;-)
Модель у них ес-сно одна на двоих, т.к. список устанавливает модель форме через
void setExtModel(QSqlTableModel *extmodel);
Мапер связывает поля модели в объекте формы. (Один класс на форму и список !)
mapper = new QDataWidgetMapper(this);
mapper->setModel(model);
......................................................
aStr = QString("fld_%1").arg(Idd);
mapper->addMapping((QLineEdit *)wo, model->fieldIndex(aStr));
mapper->toFirst();
Вызов формы из объекта списка тривиален
void fpForm::keyPressEvent ( QKeyEvent * event )
{
switch(event->key())
{
case Qt::Key_Return:
if (DlgForm)
{
DlgForm->exec();
event->accept();
return;
}
break;
case Qt::Key_Space: // НЕ ЛОВИТ
if (DlgForm)
{
DlgForm->view();
event->accept();
return;
}
break;
........................................
Трабл-ема в том, что форма всегда показывает ПЕРВУЮ запись, а не выбранную в ( QTableView *view; )
Я предполагал, что указателя на модель, для определения выбора mapper-у будет достаточно
Помогите PLZ спозиционировать в форму выбранную запись ...
И попутно, в void fpForm::keyPressEvent ( QKeyEvent * event ) не отлавливается почему-то клавиша пробел ?!
Кто-либо сталкивался ? QT 4.5.3.