Цитата(Litkevich Yuriy @ 2.12.2009, 17:49)
Хм, вроде тут всё относительно просто:
Согласен, сложного ничего.
В моем случае в дереве хранятся объекты разных типов: пользователи содержат папки, которые содержат сообщения
Пользователи при этом используют сигналы/слоты.
В функциях index, data, parent модели приходится определять какой тип текущего узла. Для этого есть тип Node:
#include <QObject>
class Node
{
public:
enum NType
{
N_USER,
N_FOLDER,
N_MSG
};
Node(NType tp_): tp(tp_){};
NType getType() const{return tp;}
void setType(NType tp_){tp = tp_;}
private:
NType tp;
};
class Folder : public Node
{
public:
Folder() : Node(Node::N_FOLDER), b(2){};
int b;
};
class User : virtual public QObject, public Node
{
public:
User():Node(Node::N_USER), b(2){};
int b;
};
class Msg : public Node
{
public:
Msg():Node(Node::N_MSG), b(2){};
int b;
};
int main(int argc, char* argv[])
{
void* p = new Folder;
Node* node = (Node*)p;
return 0;
}
Решил использовать виртуальное наследование вместо полиморфности Node(все равботает). Правильно ли это?
Хорошая статься в тему
http://www.devdoc.ru/index.php/content/view/virtual_base.htm