Russian Qt Forum

Qt => Model-View (MV) => Тема начата: chu от Октябрь 31, 2010, 04:26



Название: передача данных между двумя qsqltablemodel
Отправлено: chu от Октябрь 31, 2010, 04:26
как лучше её организовать?
есть 2 таблицы: . отображаю с помощью qtableview
устанавливаю сигнал для первой:
Код:
    connect(procModel, SIGNAL(beforeUpdate(int ,QSqlRecord &)),
            this, SLOT(beforeUpdateProc(int ,QSqlRecord &)));
начал писать функцию, не знаю как закончить:
Код:
void My_Form::beforeUpdateProc(int, QSqlRecord &record)
{
    int min=(procTableView->currentIndex().sibling(0, 5)).data().toInt();
    for (int i=1; i < procModel->rowCount(); i++){
        int temp=(procTableView->currentIndex().sibling(i, 5)).data().toInt();
        if (temp<min)
            min=temp;
    }
...
}
нужно записать значение min в ячейку другой таблицы


Название: Re: передача данных между двумя qsqltablemodel
Отправлено: kibsoft от Октябрь 31, 2010, 19:46
Цитировать
virtual bool setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole )
у модели.

Ну или SQL-запрос явно.. (QSqlQuery).


Название: Re: передача данных между двумя qsqltablemodel
Отправлено: chu от Ноябрь 01, 2010, 17:26
1) дописал функцию, добавил прямой sql-запрос:
Код:
    
    int id = (procTableView->currentIndex().sibling(row, 6)).data().toInt();
    QSqlQuery query;
    query.exec(QString("update details set status = %1 where id = %2").arg(min).arg(id));

но ячейка в таблице "details" обновляется только после перезапуска диалога.
обе таблицы находятся в одном QDialog.
пробовал дописать
Код:
detModel->select
, но тогда изменение в procModel не записываются в БД

2) с setData то же самое: изменение в procModel не записываются в БД :(


Название: Re: передача данных между двумя qsqltablemodel
Отправлено: kibsoft от Ноябрь 01, 2010, 20:15
Цитировать
но тогда не отображается вторая таблица
Не совсем понимаю что вы там делаете, но может у второй модели тоже select вызвать?


Название: Re: передача данных между двумя qsqltablemodel
Отправлено: chu от Ноябрь 01, 2010, 23:33
Цитировать
Не совсем понимаю что вы там делаете, но может у второй модели тоже select вызвать?
хочу обновить отображение обеих таблиц.
При вызове detModel->select, после обновления procModel,  обновляется detModel, но
почему-то при следушем измении procModel предыдущее его изменение пропадает.
пробовал вызывать select для обоих моделей. не помогло.
Думаю что, нужно найти какой-нибудь другой подход, чтоб без select... Есть такой?


Название: Re: передача данных между двумя qsqltablemodel
Отправлено: kibsoft от Ноябрь 02, 2010, 00:07
Так может поставить setEditStrategy(QSqlTableModel::OnFieldChange) у обоих моделей, чтобы все изменения сразу в базу писались..


Название: Re: передача данных между двумя qsqltablemodel
Отправлено: chu от Ноябрь 02, 2010, 00:38
Цитировать
Так может поставить setEditStrategy(QSqlTableModel::OnFieldChange) у обоих моделей, чтобы все изменения сразу в базу писались..
стоит у обеих моделей

решил задачу добавлением ещё одного сигнала и слота:
Код:
    connect(procModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
                         this, SLOT(afterUpdateProc()));

Код:
void Det_Form::afterUpdateProc()
{
    procModel->submitAll();
    detModel->select();
}