В QT объединение в цепочку моделей не работает как ожидалось

Я предложил бы следующий путь:

  1. Во время обратного вызова TabLayout.OnTabSelectedListener

    Метод onTabSelected(TabLayout.Tab tab) предоставит Вам выбранная вкладка . поэтому найдите свой близкий значок от него с помощью findViewById и затем установите слушателя щелчка на нем.

    Во время метода onTabUnselected(TabLayout.Tab tab) можно удалить слушателя щелчка для конкретного близкого значка.

  2. Во время события щелчка Вашей близкой кнопки,

    можно добраться выбранный заголовок вкладки использование getSelectedTabPosition() . Так с помощью того индекса можно удалить ту вкладку,

    Для удаления кнопок изо всех вкладок, которых можно выполнить итерации через все вкладки с помощью комбинации [1 112] getTabAt (int index) & getTabCount () методы от TabLayout тогда удаляют его один за другим и после этого также удаляют вкладку, и это - данные после этого в этом слушателе щелчка.

Да, нет никакого простого способа сделать этот материал, но он поможет как неоднородный путь.

5
задан 7 September 2009 в 06:58
поделиться

1 ответ

Поскольку QTableView использует индекс модели для извлечения данных, возможно, что-то вроде этого.

QModelIndex index = model->index(row, column, parentIndex); 
index.data(Qt::DisplayRole);

И вы возвращаете индекс модели исходной модели вместо индекса вашей прокси-модели:

QModelIndex index ( int row, int column, const QModelIndex & parent = QModelIndex() ) const {
    return this->sourceModel()->index(row,column,parent);
}

Попробуйте преобразовать индекс модели в индекс вашей прокси-модели

QModelIndex index ( int row, int column, const QModelIndex & parent = QModelIndex() ) const {
    return this->createIndex(row,column,row);
}

Не забудьте переписать карту в источник и преобразовать из функций источника.


Решение

class MyTableProxyModel : public QAbstractProxyModel
{
    Q_OBJECT
public:
    MyTableProxyModel (QObject* parent = 0) 
        : QAbstractProxyModel(parent) {
    }

    QModelIndex index(int row, int column, const QModelIndex& parent=QModelIndex()) const {
        return createIndex(row,column,row);
    }

    QModelIndex parent(const QModelIndex &index) const {
        //Works only for non-tree models
        return QModelIndex();
    }

    QModelIndex mapFromSource(const QModelIndex &source) const {
        return index(source.row(), source.column(), source.parent());
    }

    QModelIndex mapToSource(const QModelIndex &proxy) const {
        return (sourceModel()&&proxy.isValid())
            ? sourceModel()->index(proxy.row(), proxy.column(), proxy.parent()) 
            : QModelIndex();
    }

    QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const {
        qDebug() << "myproxymodel data";
        return mapToSource(index).data(role);
    }

    int rowCount ( const QModelIndex & parent = QModelIndex() ) const {
        return sourceModel() ? sourceModel()->rowCount(parent) : 0;
    }

    int columnCount ( const QModelIndex & parent = QModelIndex() ) const {
        return sourceModel() ? sourceModel()->columnCount(parent) : 0;
    }
};
6
ответ дан 14 December 2019 в 13:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: