![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Гость_Mir_* |
![]() ![]()
Сообщение
#1
|
Гости ![]() |
Добрый день!
Прошу не судить строго за возможно элементарную ошибку - Данные из базы выводятся в виджеты (через модель и мэппер) корректно, редактируются, но изменения не фиксируются (при переходе к следующей записи и возврате к первой - изменения пропадают) Собственно код(переделываю стандартный пример): Раскрывающийся текст #include <QtWidgets> #include <QtSql> #include <QSqlDatabase> #include "window.h" #include <QDebug> #include <QSqlError> //! [Set up widgets] Window::Window(QWidget *parent) : QWidget(parent) { setupModel(); nameLabel = new QLabel(tr("Sensor Name:")); nameEdit = new QLineEdit(); topLabel = new QLabel(tr("Top lvl:")); topEdit = new QLineEdit(); nextButton = new QPushButton(tr("&Next")); previousButton = new QPushButton(tr("&Previous")); mapper = new QDataWidgetMapper(this); mapper->setModel(SensorsMod); mapper->addMapping(nameEdit, SensorsMod->fieldIndex("name")); mapper->addMapping(topEdit, SensorsMod->fieldIndex("top")); connect(previousButton, SIGNAL(clicked()), mapper, SLOT(toPrevious())); connect(nextButton, SIGNAL(clicked()), mapper, SLOT(toNext())); connect(mapper, SIGNAL(currentIndexChanged(int)), this, SLOT(updateButtons(int))); QGridLayout *layout = new QGridLayout(); layout->addWidget(nameLabel, 0, 0, 1, 1); layout->addWidget(nameEdit, 0, 1, 1, 1); layout->addWidget(previousButton, 0, 2, 1, 1); layout->addWidget(topLabel, 1, 0, 1, 1); layout->addWidget(topEdit, 1, 1, 2, 1); layout->addWidget(nextButton, 1, 2, 1, 1); setLayout(layout); mapper->toFirst(); } void Window::setupModel() { db = QSqlDatabase::addDatabase("QPSQL", "AstroDB"); db.setHostName("localhost"); db.setDatabaseName("AstroDB"); db.setUserName("postgres"); db.setPassword("admin"); if (!db.open()) { QMessageBox::critical(0, tr("Cannot open database"), tr("Unable to establish a database connection.\n" ), QMessageBox::Cancel); return; } SensorsMod = new QSqlRelationalTableModel(this,db); SensorsMod->setTable("sensors"); SensorsMod->setEditStrategy(QSqlTableModel::OnFieldChange); SensorsMod->select(); } void Window::updateButtons(int row) { previousButton->setEnabled(row > 0); nextButton->setEnabled(row < SensorsMod->rowCount() - 1); } Заранее благодарю за ответы! |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 17.2.2025, 19:24 |