crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Спозиционировать на запись в QSqlTableModel, Найти индекс записи
JohnZ
  опции профиля:
сообщение 29.9.2014, 18:31
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 139
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 10 раз(а)




Репутация:   0  


Всем Здравствовать !

Есть такой класс на диалоге, для обслуживания динам-х форм.

#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.

Сообщение отредактировал JohnZ - 29.9.2014, 18:35
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.4.2024, 1:39