Zdravim,
mám takový problém a nějak nechápu, proč mi nejde použít generický typ na třídu, která používá Q_OBJECT.
Mám tyto třídy - Core, A, AEx... kde Core je hlavní třída, která vytváří mapu dle vstupního typu a třída A je hlavní třída objektu a AEx je potomek, co dědí z hlavní třídy A..
Viz. příklad:
Třída Core:
#include <QObject>
#include <QMap>
template <class T>
class Core : public QObject
{
Q_OBJECT
public:
explicit Core(QObject *parent = 0);
void add(T *item);
private:
QMap<int, T*> *_array;
};
--------------------------------------------
#include "Core.h"
template <class T>
Core<T>::Core(QObject *parent) : QObject(parent)
{
_array = new QMap<int, T>();
}
template <class T>
void Core<T>::add(T *item)
{
_array->insert(item->ID(), item);
}
Třída A, která je základ:
#include <QObject>
class A : public QObject
{
Q_OBJECT
public:
explicit A(int id, QObject *parent = 0);
int ID() const;
private:
int _id;
};
----------------------------------------------
#include "A.h"
A::A(int id, QObject *parent) : QObject(parent)
{
_id = id;
}
int A::ID() const
{
return _id;
}
A třída AEx, která rozšiřuje základní třídu A:
#include "A.h"
class AEx : public A
{
Q_OBJECT
public:
explicit AEx(int id, QObject *parent = 0);
void setName(QString name);
QString Name() const;
private:
QString _name;
};
----------------------------------------------
#include "AEx.h"
AEx::AEx(int id, QObject *parent) : A(id, parent)
{
}
void AEx::setName(QString name)
{
_name = name;
}
QString AEx::Name() const
{
return _name;
}
Jde o to, že všechny třídy musí být Q_OBJECT a v mainu bych si to představoval volat jako:
#include "Core.h"
#include "A.h"
#include "AEx.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
// pomoci zakladni tridy A
Core<A> *coreBase = new Core<A>(this);
// pomoci rozsirene tridy AEx
Core<AEx> *core = new Core<AEx>(this);
w.show();
return a.exec();
}
Můžete mi prosím poradit, jak mám použít tento způsob vytvoření objektu, kde si předem určím (při vytvoření instance třídy Core), o jakou třídu se má jednat, jestli A nebo AEx ?
Tento způsob je bez chyby, jen mi to píše toto a nevím jak teda mám problém vyřešit tak, jak bych si představoval :(
Chyba:Template classes not supported by Q_OBJECT