Есть столбцы таблицы: id | name | age
Посоветуйте, как правильно выводить текст в combobox, чтобы был такой формат: name - age. например, вася - 18
Пробовал вот так:
//получаем нашу модель
QUserModel *modelUser = static_cast<QUserModel *>(_model->relationModel(_model->fieldIndex("somekey")));
ui->combobox->setModel(modelUser);
ui->combobox->setModelColumn(modelUser->fieldIndex("name"));
// реализация класса
class QUserModel : public QSqlTableModel {
public:
explicit QUserModel (QObject* parent=nullptr):QSqlTableModel(parent){}
~QUserModel (){}
protected:
QVariant data(const QModelIndex &index, int role) const
{
qDebug() << role;
if(role == Qt::DisplayRole && index.column() == fieldIndex("name") ){
QVariant age = QSqlTableModel::data(index.sibling(index.row(),fieldIndex("age")), role);
QVariant name = QSqlTableModel::data(index, role);
qDebug() << name << age;
QSqlTableModel::data(index, role);
}
return QSqlTableModel::data(index, role);
}
};
В дебаге пусто...
Пробовал вот так еще:
class QUserFilter : public QSortFilterProxyModel
{
public:
explicit QUserFilter (QObject* parent=nullptr):QSortFilterProxyModel(parent){}
~QUserFilter (){}
protected:
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const{
QModelIndex indexName = sourceModel()->index(source_row, 1, source_parent);
QModelIndex indexAge = sourceModel()->index(source_row, 2, source_parent);
QVariant name = sourceModel()->data(indexName,Qt::EditRole);
QVariant age= sourceModel()->data(indexAge ,Qt::EditRole);
if(name.isValid() && age.isValid()){
QString result = name.toString() + " - " + age.toString();
sourceModel()->setData(indexName,QVariant(result));
}
return true;
};
Буду благодарен в помощи)