qt QStandardItemModel data () не вызывается

У меня есть очень простая, пользовательская модель, полученная из QStandardItemModel, функции rowCount а также columnCount Вызываются несколько раз, тогда как ни одна из оставшихся функций, в частности, data() никогда не называется. Я не могу найти причину.

#include <IBAdditions/IB_events.h>

#include <QtGui/QStandardItemModel>
#include <QtGui/QStandardItem>
#include <QtCore/QtCore>

#include <vector>

/**
* model which allows for display
* of available data streams as tickers
*/
class TickerDisplayModel : public QStandardItemModel {

Q_OBJECT
public:
TickerDisplayModel(std::vector<IBAdditions::ContractEvent> availableTickers, QObject *parent = 0);
int rowCount(const QModelIndex &parent = QModelIndex()) const ;
int columnCount(const QModelIndex &parent = QModelIndex()) const;
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
bool setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole);
Qt::ItemFlags flags(const QModelIndex & index) const;
private:
int m_;
int n_;
std::vector<IBAdditions::ContractEvent>& availableTickers_;
signals:
void editCompleted(const QString &);
};

как это называется:

SubscribeToDataGUI::SubscribeToDataGUI(QWidget* parent) : QDialog(parent) {
widget_.setupUi(this);
IBAdditions::ContractEvent c;
c.symbol = "EUR"; c.currency = "USD"; c.event_ = IBAdditions::TickPrice;
availableTickers_.push_back(c);
model_.reset(new TickerDisplayModel(availableTickers_));
widget_.listView->setModel(model_.get());
widget_.listView->show();
}

0

Решение

Я думаю, что невозможно подкласс данных в QStandardItemModel.

Я просто пытаюсь изменить свой собственный QAbstractItemModel на QStandardItemModel, и данные тоже не вызываются.

Попробуйте использовать QAbstractItemModel.
Я думаю, что вы реализовали почти все, что вам нужно, чтобы использовать QAbstractItemModel

Вам нужно реализовать index и parent. Поскольку у вас нет высокотехнологичной модели, родитель всегда должен возвращать неверный индекс.

Это может быть реализовано так:

    QModelIndex TickerDisplayModel::index(int row, int column, const QModelIndex &parent) const
{
return hasIndex(row, column, parent) ? createIndex(row, column, 0) : QModelIndex();
}

QModelIndex TickerDisplayModel::parent(const QModelIndex &child) const
{
return QModelIndex(); // since no hiearchy model, this should always return invalid index
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]