tableData(...)
Не делайте)) Но эту логику все равно делать предется. Не хотите тихать её в модель, сделайте своботдый метот QVariant getObjData(Obj* obj, int column, int role) {
switch (obj->type()) {
case ObjType::GROUP: {
// Куча всякой дряни с qobject_cast, switch(role), switch(index.column())
}
case ObjType::LEAF: {
// Такая же дрянь
}
}
}
// Куча всякой дряни с qobject_cast, switch(role), switch(index.column())уходит в конкретного наследника интерфейса. При этом в модели останется что то вроде:
void MyModel::data(const QModelIndex& index, int role) {
Obj* obj = toObj(index);
return obj->tableData(index.column(), role);
}
#include <iostream>
#include <string>
struct Person
{
std::string name;
int age;
};
std::ostream& operator << (std::ostream &os, const Person &p)
{
return os << p.name << " " << p.age;
}
int main()
{
Person tom;
tom.name = "Tom";
tom.age = 31;
std::cout << tom << std::endl;
return 0;
}
std::ostream& operator << (std::ostream &os, const Person &p)
{
return os << p.name << " " << p.age;
}