LINUX.ORG.RU

не стандартный MyTableView

 


0

1

записи в некоторой таблице Table храняться так

x_id   y_id     value
1      1        12
1      2        22
1      3        25
2      1        1.1
2      2        2.2
2      3        4.4
//...

Подскажите методы qt для реализации таблицы представления, отображающую эти данные так:

x/y   1     2     3
1     12    22    25
2     1.1   2.2   4.4
3    .....

Сделать реализацию метода

QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
в модели таблицы?

BruteForce ★★★
()
Ответ на: комментарий от BruteForce

А как переопределить адрес ячейки


QVariant MyTableModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const {
   QVariantValue value = QSqlQueryModel::data(index,role);
   switch(role){
   case Qt::DisplayRole:
   case Qt::EditRole:
      if(index.column()==0) return ЧтоВозвращать?
   }
}

developer-cpp
() автор топика
Ответ на: комментарий от Stil

Ну, я не «модель прокси», а функцию прокси предложил. Некая

value toXY(db, x, y) {
foreach(node in db)
if (node.x_id == x, node.y_id == y)
return node.value;
}

BruteForce ★★★
()
Ответ на: комментарий от developer-cpp

Если хочется ещё и хидер, как ты описал, то придётся ещё headerData и setHeaderData переопределить соответственно (set'er чисто что бы шаловливые ручки чьи нить ничего не поломали, ну и в общем для сохранения консистентности обьекта).

pon4ik ★★★★★
()
Ответ на: комментарий от BruteForce

Ты таки предложил костыль, ибо есть документированное, и рекомендуемое разработчиками фрейма средство. Не надо вот сбивать человека с пути, что бы ЧСВ потешить.

Я уже молчу, что решение с циклом стухнет на любом ощутимом наборе данных.

pon4ik ★★★★★
()
Ответ на: комментарий от BruteForce

помогите разобраться, не удается даже запустить «ничего не делающий» прокси:

class XYProxy: public QAbstractProxyModel {
Q_OBJECT
  XYProxy(QObject *parent = 0) : QAbstractProxyModel(parent)   {}
  QModelIndex mapToSource(const QModelIndex &proxyIndex) const
  {
     return proxyIndex;
  }
 
  QModelIndex mapFromSource(const QModelIndex &sourceIndex) const
  {
     return sourceIndex;
  }
};
// ...

XYProxy *proxy = new XYProxy(this); //error: cannot allocate an object of abstract type ‘XYProxy’
proxy->setSourceModel(model);
view->setModel(proxy);

developer-cpp
() автор топика
Ответ на: комментарий от developer-cpp

Нашел рабочий прокси.

прошу помощи:

1. почему-то через этот прокси данные не сохраняются

2. не понятно что делать с индексами, чтобы получить таблицу из первого поста

// http://stackoverflow.com/questions/1387912/in-qt-chaining-models-does-not-work-as-expected
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;
    }
};

P.S. может есть какой учебник хороший по разработке БД с Qt?

developer-cpp
() автор топика
Ответ на: комментарий от developer-cpp

БД тут непричем. Потренируйся «на котиках» :-)

Jetty ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.