void mySqlRelationalDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { if (!index.isValid()) return; QSqlRelationalTableModel *sqlModel = qobject_cast<QSqlRelationalTableModel *>(model); QSortFilterProxyModel* proxyModel = NULL; if (!sqlModel ) { proxyModel = qobject_cast<QSortFilterProxyModel *>(model); if (proxyModel) sqlModel = qobject_cast<QSqlRelationalTableModel *>(proxyModel->sourceModel()); } QSqlTableModel *childModel = sqlModel ? sqlModel->relationModel(index.column()) : 0; QComboBox *combo = qobject_cast<QComboBox *>(editor); if (!sqlModel || !childModel || !combo) { QItemDelegate::setModelData(editor, model, index); return; } int currentItem = combo->currentIndex(); int childColIndex = childModel->fieldIndex(sqlModel->relation(index.column()).displayColumn()); int childEditIndex = childModel->fieldIndex(sqlModel->relation(index.column()).indexColumn()); if (proxyModel) { proxyModel->setData(index, childModel->data(childModel->index(currentItem, childColIndex), Qt::DisplayRole), Qt::DisplayRole); proxyModel->setData(index, childModel->data(childModel->index(currentItem, childEditIndex), Qt::EditRole), Qt::EditRole); } else { sqlModel->setData(index, childModel->data(childModel->index(currentItem, childColIndex), Qt::DisplayRole), Qt::DisplayRole); sqlModel->setData(index, childModel->data(childModel->index(currentItem, childEditIndex), Qt::EditRole), Qt::EditRole); } }
void CarsEdit::FillTable() { QString str_oper = "SELECT hm_cars.id, hm_cars.name, hm_cars.speed, hm_fuel.name, hm_fuel.id FROM hm_cars INNER JOIN hm_fuel ON hm_cars.fuel_id = hm_fuel.id;"; QSqlQueryModel * model_Oper = new QSqlQueryModel(0); model_Oper->setQuery(str_oper); model_Oper->setHeaderData(1, Qt::Horizontal, QObject::trUtf8("Название автомобиля")); model_Oper->setHeaderData(2, Qt::Horizontal, QObject::trUtf8("Максимальная скорость")); model_Oper->setHeaderData(3, Qt::Horizontal, QObject::trUtf8("Тип топлива")); ui->tableView->setModel(model_Oper); ui->tableView->hideColumn(0); ui->tableView->hideColumn(4); QSqlRelationalTableModel *comboModel = new QSqlRelationalTableModel(0); comboModel->setTable("hm_fuel"); int comboIndex = comboModel->fieldIndex("id"); comboModel->setRelation(comboIndex, QSqlRelation("hm_fuel", "id", "name")); comboModel->select(); QSqlTableModel *comboRelModel = comboModel->relationModel(comboIndex); ui->comboBox->setModel(comboRelModel); ui->comboBox->setModelColumn(comboRelModel->fieldIndex("name")); }
void MySqlRelationDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { if (!index.isValid()) return; QSqlRelationalTableModel *sqlModel = qobject_cast<QSqlRelationalTableModel *>(model); QSqlTableModel *childModel = sqlModel ? sqlModel->relationModel(index.column()) : 0; QComboBox *combo = qobject_cast<QComboBox *>(editor); if (!sqlModel || !childModel || !combo) { if (HandbookDialog::m_record.fieldName(index.column()).contains("IS_", Qt::CaseSensitive)) { QCheckBox * checkBox = qobject_cast<QCheckBox *>(editor); sqlModel->setData(index, checkBox->isChecked(), Qt::DisplayRole); sqlModel->setData(index, checkBox->isChecked(), Qt::EditRole); return; } else if (HandbookDialog::m_record.fieldName(index.column()).contains("DATE_", Qt::CaseSensitive)) { QDateEdit * dateEdit = qobject_cast<QDateEdit *>(editor); sqlModel->setData(index, dateEdit->date().toString("yyyy-MM-dd"), Qt::DisplayRole); sqlModel->setData(index, dateEdit->date().toString("yyyy-MM-dd"), Qt::EditRole); return; } else { QItemDelegate::setModelData(editor, model, index); return; } } int currentItem = combo->currentIndex(); int childColIndex = childModel->fieldIndex(sqlModel->relation(index.column()).displayColumn()); int childEditIndex = childModel->fieldIndex(sqlModel->relation(index.column()).indexColumn()); sqlModel->setData(index, childModel->data(childModel->index(currentItem, childColIndex), Qt::DisplayRole), Qt::DisplayRole); sqlModel->setData(index, childModel->data(childModel->index(currentItem, childEditIndex), Qt::EditRole), Qt::EditRole); }
SideBarTask::SideBarTask(QWidget *parent) : QWidget(parent), ui(new Ui::sideBarTask) { ui->setupUi(this); layout = new QVBoxLayout(); // task course courseDropDown = new QComboBox(); // task type taskType = new TriStateButton("Type: ", "TE","Devoir", "Labo"); // Task name taskName = new QLineEdit(); taskName->setPlaceholderText("Titre de la tache"); // Task description description = new QTextEdit(); description->setPlaceholderText("Description"); description->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::MinimumExpanding); description->setMinimumHeight(20); description->setMaximumHeight(100); // task priority priority = new TriStateButton("Priorité: ", "Basse", "Moyenne", "Haute"); // task term termDate = new QDateTimeEdit; termDate->setCalendarPopup(true); hasTerm = new QCheckBox("Echéance"); hasTerm->setChecked(false); connect(hasTerm, SIGNAL(clicked(bool)), termDate, SLOT(setEnabled(bool)) ); termDate->setEnabled(false); // Task Submit btnSubmit = new QPushButton(); btnSubmit->setText("Sauver"); btnSubmit->setDefault(false); btnSubmit->setAutoDefault(true); QSqlRelationalTableModel *model = Task::getInstance()->getModel(); courseIndex = Task::getInstance()->getCourseIndex(); //SQLRelation set dropdown to search course name in DB relModel = model->relationModel(courseIndex); courseDropDown->setModel(relModel); courseDropDown->setModelColumn(relModel->fieldIndex("name")); mapper = new QDataWidgetMapper(this); mapper->setModel(model); mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit); mapper->setItemDelegate(new QSqlRelationalDelegate(this)); // Mapping mapper->addMapping(taskName, model->fieldIndex("name")); mapper->addMapping(description, model->fieldIndex("description")); mapper->addMapping(courseDropDown, courseIndex); mapper->addMapping(priority, model->fieldIndex("priority")); mapper->addMapping(taskType, model->fieldIndex("typeId")); mapper->addMapping(termDate, model->fieldIndex("termDate")); // Ajout des widgets au layout layout->addWidget(courseDropDown); layout->addWidget(taskType); layout->addSpacing(10); layout->addWidget(taskName); layout->addWidget(description); layout->addSpacing(10); layout->addWidget(hasTerm); layout->addWidget(termDate); layout->addSpacing(10); layout->addWidget(priority); layout->addWidget(btnSubmit, QDialogButtonBox::AcceptRole); layout->addStretch(); connect(btnSubmit, SIGNAL(clicked()), this , SLOT(submitTask())); mapper->toFirst(); this->setLayout(layout); }