Russian Qt Forum

Qt => Model-View (MV) => Тема начата: SpaceRabbit от Январь 31, 2013, 13:27



Название: Как удалить колонки через QSortFilterProxyModel?
Отправлено: 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 в созданной модели или нет?

Заранее благодарен.


Название: Re: Как удалить колонки через QSortFilterProxyModel?
Отправлено: kambala от Январь 31, 2013, 14:03
тебе нужно переопределить метод virtual bool QSortFilterProxyModel::filterAcceptsColumn ( int source_column, const QModelIndex & source_parent ) const и возвращать тру для нужных колонок


Название: Re: Как удалить колонки через QSortFilterProxyModel?
Отправлено: UNION labs от Январь 31, 2013, 15:13
Можно просто скрывать столбцы непосредственно в представлении
Код:
void QTableView::hideColumn ( int column ) [slot]


Название: Re: Как удалить колонки через QSortFilterProxyModel?
Отправлено: SpaceRabbit от Январь 31, 2013, 15:21
Спасибо, сделал через filterAcceptsColumn, правильно ли я делаю: для каждого представления промежуточная модель (proxy) скрывающая нужные колонки? И заодно вопрос по QAbstractTableModel, как сделать, чтобы колонки автоматичесски растягивались?
(http://s005.radikal.ru/i211/1301/7e/c1909cedc94e.png)
слева я растянул вручную, справа не растянуто


Название: Re: Как удалить колонки через QSortFilterProxyModel?
Отправлено: Bepec от Январь 31, 2013, 15:29
HorizontalHeaderStrechLastSection по второму вопросу


Название: Re: Как удалить колонки через QSortFilterProxyModel?
Отправлено: SpaceRabbit от Январь 31, 2013, 16:01
HorizontalHeaderStrechLastSection по второму вопросу
Спасибо =)