Сделал модель, и пример данных, но они не отображаются ни в tableView
, ни в columnView
. Что делаю не так?
Вопрос связан с Помогите с реализацией модели (MVC) в QT.
Структура проекта:
Окно приложения
Скриншот окна
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "somemodel.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QList<Some> b;
for (int i = 0; i < 2; ++i) {
Some s;
s.id = i + 1;
s.name = QString("Name%1").arg(i);
for (int j = 0; j < 5; ++j) {
Some2 s2;
s2.id = (i + 1) * 10 + j;
s2.description = QString("Description: %1").arg((i + 1) * 10 + j);
s.child.append(s2);
}
b.append(s);
}
SomeModel *sm = new SomeModel(b, this);
ui->tableView->setModel(sm);
ui->columnView->setModel(sm);
}
MainWindow::~MainWindow() { delete ui; }
somemodel.h
#ifndef SOMEMODEL_H
#define SOMEMODEL_H
#include <QAbstractListModel>
struct Some2 {
static const QStringList FIELD_TEXT;
int id;
QString description;
};
struct Some {
static const QStringList FIELD_TEXT;
QString name;
int id;
QList<Some2> child;
QString operator[] (const int index) const;
};
class SomeModel : public QAbstractListModel
{
Q_OBJECT
public:
SomeModel(QObject *parent = nullptr) : QAbstractListModel(parent) { }
SomeModel(QList<Some> bases, QObject *parent = nullptr)
: QAbstractListModel(parent), _bases(bases) { }
int rowCount(const QModelIndex &parent) const override;
int columnCount(const QModelIndex &parent) const override;
QVariant data(const QModelIndex &index, int role) const override;
protected:
QList<Some> _bases;
public:
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
};
#endif // SOMEMODEL_H
somemodel.cpp
#include "somemodel.h"
// Some / Some2
const QStringList Some2::FIELD_TEXT = QStringList() << "ID" << "Description";
const QStringList Some::FIELD_TEXT = QStringList() << "Name" << "ID";
QString Some::operator[](const int index) const
{
if (index == 0) { return name; }
if (index == 1) { return QString::number(id); }
return nullptr;
}
// SomeModel
int SomeModel::rowCount(const QModelIndex &parent) const
{
if (!parent.isValid()) { return 0; }
return _bases.size();
}
int SomeModel::columnCount(const QModelIndex &parent) const
{
if (!parent.isValid()) { return 0; }
return Some::FIELD_TEXT.size();
}
QVariant SomeModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid()) { return QVariant(); }
if (index.row() < 0 || index.row() >= _bases.size()
|| index.column() < 0 || index.column() >= 2) { return QVariant(); }
if (role != Qt::DisplayRole) { return QVariant(); }
return _bases.at(index.row())[index.column()];
}
QVariant SomeModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if (role != Qt::DisplayRole) { return QVariant(); }
if (orientation == Qt::Horizontal) {
return Some::FIELD_TEXT.at(section); // можно добавить проверку на sect < FIELD.size()
} else if (orientation == Qt::Vertical) {
return QString::number(section);
}
return QVariant();
}
UDP:
При дебаге обнаружил, что rowCount, columnCount
вызывается с некорректным parent (parent.isValid() == false
). Как это исправить?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Существует класс Realty в котором экземпляры Apartment и вектор с объектами catalogМетод price_filter должен фильтровать объекты по переменной price
Необработанное исключение по адресу 0x00007FF86C6A8028 (ucrtbasedll) в Project1
Хотел подключить jQuery, но выдает массу ошибок, как исправить не знаю ,скрины прилагаю: