crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Вывести в combobox значения 2-х столбцов
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Анна Дата 23.10.2017, 16:21
  Ты на верном пути, но надо написать прокси модельку не от QSortFilterProxyModel, а от QAbstractProxyModel, которая имеет одну колонку -
int columnCount() const {return 1;}

а в data() как раз делает то, что ты написал в filterAcceptsRow() - объединяет значения из двух колонок в одно.

Такую модельку можно подсунуть в combobox.
iCast Дата 7.10.2017, 13:37
  Есть столбцы таблицы: 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;
};

Буду благодарен в помощи)
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 4.12.2020, 8:49