Russian Qt Forum
Ноябрь 24, 2024, 09:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSqlTableModel и QDataWidgetMapper  (Прочитано 4044 раз)
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). Это какой-то глюк? Или же никто не гарантирует порядок хранения строк?
Записан
RVZ
Гость
« Ответ #1 : Апрель 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()
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.133 секунд. Запросов: 20.