crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

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


Последние 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 Рейтинг@Mail.ru Текстовая версия Сейчас: 15.7.2025, 2:48