Russian Qt Forum

Qt => Базы данных => Тема начата: hank от Февраль 24, 2011, 18:10



Название: QSqlTableModel и QDataWidgetMapper
Отправлено: hank от Февраль 24, 2011, 18:10
Имею следующий код:
Код
C++ (Qt)
model = new QSqlTableModel(this,DB);
model->setTable("test");
model->setSort(0,Qt::AscendingOrder);
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->setFilter("id = "+QString::number(ID));
model->select();
 
mapper = new QDataWidgetMapper();
 
mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
mapper->setModel(model);
 
mapper->addMapping(ui->lineEdit_1,model->fieldIndex("n1"));
...
mapper->addMapping(ui->lineEdit_10,model->fieldIndex("n2"));
 
mapper->toFirst();
 

Плюс ещё есть ComboBox, которым я выбираю первичный ключ (ID). Далее в соответствии с ним на визуальные компоненты должно выводиться содержимое таблицы (каждому значению ключа соответствует единственная запись в таблице).
Поля в таблице имеют типы VarChar и Int.
Проблема заключается в том, что когда я при помощи КомбоБокса перехожу на строку с пустыми полями, в ЛайнЭдитах, которым соответствуют поля с типом Int, остаются значения с прошлого раза. То есть содержимое ЛайнЭдита не стирается. Хотя есть тип поля - VarChar, всё работает нормально.

Также в окно Дебага я постоянно получаю предупреждения:
Object::connect: No such signal QObject::dataChanged(QModelIndex,QModelIndex) in itemviews\qdatawidgetmapper.cpp:382
Что это?

Также мне непонятнен следующий вопрос. После различных манипуляций с таблицей меняется порядок строк в ней. Например, я заполняю таблицу строками с первичными ключами, выстроенными по возрастанию. Потом я работаю с таблицей (добавляю, удаляю значения) и порядок строк меняется (проверяю командой SELECT * FROM). Это какой-то глюк? Или же никто не гарантирует порядок хранения строк?


Название: Re: QSqlTableModel и QDataWidgetMapper
Отправлено: RVZ от Апрель 06, 2011, 13:45
как я предполагаю гдето в коде сигнал изменения данных комбика коннектится к функции изменения фильтра модели так вот
No such signal QObject::dataChanged(QModelIndex,QModelIndex)
означает что сигнала dataChanged(QModelIndex,QModelIndex) предположительно у комбика нет
есть такие http://doc.crossplatform.ru/qt/4.3.5/qcombobox.html
Код
C++ (Qt)
   *void activated ( int index )
   *void activated ( const QString & text )
   *void currentIndexChanged ( int index )
   *void currentIndexChanged ( const QString & text )
   *void editTextChanged ( const QString & text )
   *void highlighted ( int index )
   *void highlighted ( const QString & text )
 
причем модельку после смены фильтра надо занова проселектить  а мапер промапить и как мне кажется setCurrentIndex(0) более надежнее чем toFirst()