Russian Qt Forum
Ноябрь 23, 2024, 07:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как удалить колонки через QSortFilterProxyModel?  (Прочитано 4263 раз)
SpaceRabbit
Гость
« : Январь 31, 2013, 13:27 »

Скажите, пожалуйста, как правильно удалять колонки из модели.
Я наследую QAbstractTableModel, заполняю его тремя QMap, создаю таблицу из 6 колонок, вида:
key_map1 | value_map1 | key_map2 | value_map2 | key_map3 | value_map3

На форме три таблицы QTableView, в первый QTableView мне нужны колонки key_map1 | value_map1, во второй key_map2 | value_map2 и в третий key_map3 | value_map3 соответственно, т.е. модель имеет доступ ко всем таблицами, а каждое из представлений отображает только один QMap
Как я понимаю делается это через QSortFilterProxyModel, но у меня не получается.

Так выглядит модель:
Код:
class BushelFrequencyModel : public QAbstractTableModel
{
public:
    BushelFrequencyModel(QObject *parent = 0){}

   ...

private:
    QMap<int, double> m_listDF;
    QMap<int, double> m_listCHVM;
    QMap<int, double> m_listFCH;
}

Видимо самое простое решение это удалить ненужные колонки:

Код:
QMap<int, double> listDF;
    listDF.insert(4, 14.5);
    listDF.insert(12, 389.4);
    listDF.insert(17, 5772.3);
    listDF.insert(28, 283.5);
    listDF.insert(40, 29999.9);

    QMap<int, double> listCHVM;
    listCHVM.insert(15, 100.3);
    listCHVM.insert(18, 673.4);
    listCHVM.insert(63, 83.5);

    QMap<int, double> listFCH;
    listFCH.insert(9, 342.9);
    listFCH.insert(32, 958.4);
    listFCH.insert(44, 871.2);
    listFCH.insert(78, 9276.3);
    listFCH.insert(94, 5493.9);
    listFCH.insert(111, 2999.9);
    listFCH.insert(156, 27050.9);
    listFCH.insert(179, 5299.1);

    // инициализация данных
    m_FrequencyModel->setFrequencyMap(listDF, listCHVM, listFCH);

    QSortFilterProxyModel *proxyModelForDF = new QSortFilterProxyModel;
    proxyModelForDF->setSourceModel(m_FrequencyModel);
    proxyModelForDF->removeColumns(2, 4);

    ui->tableDF->setModel(proxyModelForDF);

Но колонки не удаляются, нужно ли перегружать removeColumns в созданной модели или нет?

Заранее благодарен.
« Последнее редактирование: Январь 31, 2013, 16:11 от SpaceRabbit » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Январь 31, 2013, 14:03 »

тебе нужно переопределить метод virtual bool QSortFilterProxyModel::filterAcceptsColumn ( int source_column, const QModelIndex & source_parent ) const и возвращать тру для нужных колонок
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
UNION labs
Гость
« Ответ #2 : Январь 31, 2013, 15:13 »

Можно просто скрывать столбцы непосредственно в представлении
Код:
void QTableView::hideColumn ( int column ) [slot]
Записан
SpaceRabbit
Гость
« Ответ #3 : Январь 31, 2013, 15:21 »

Спасибо, сделал через filterAcceptsColumn, правильно ли я делаю: для каждого представления промежуточная модель (proxy) скрывающая нужные колонки? И заодно вопрос по QAbstractTableModel, как сделать, чтобы колонки автоматичесски растягивались?

слева я растянул вручную, справа не растянуто
Записан
Bepec
Гость
« Ответ #4 : Январь 31, 2013, 15:29 »

HorizontalHeaderStrechLastSection по второму вопросу
Записан
SpaceRabbit
Гость
« Ответ #5 : Январь 31, 2013, 16:01 »

HorizontalHeaderStrechLastSection по второму вопросу
Спасибо =)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.11 секунд. Запросов: 22.