У меня очень простая пользовательская модель, полученная от QStandardItemModel
. Функции rowCount
и columnCount
вызываются несколько раз, тогда как ни одна из оставшихся функций, в частности data()
, никогда не вызывается. Я не могу найти причину.qt QStandardItemМодель данных() не называется
#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();
}
Do ROWCOUNT) 'и' ColumnCount) функции возвращают ненулевое значение '(' (? – vahancho
да, они возвращают 2 и 3 соответственно – 4pie0
Ну, еще один момент: вы используете QStandardItemModel, однако я не вижу, чтобы вы явно добавляли QStandardItems к нему. Документы говорят, что: «QStandardItemModel обеспечивает классический подход к работе с моделью на основе элементов. ** Элементы в QStandardItemModel предоставляются QStandardItem **.". Возможно, стоит попробовать то же самое, но используя QAbstractTableModel, который лучше подходит для того, что вы делаете, ИМО? – vahancho