Итак, я хотел бы создать класс template
в C++ Qt. Проблема в том, что я использую signals
/slots
в этом классе.
Заголовок моего класса выглядит так
template <class T>
class Container : public QObject
{
Q_OBJECT
protected:
QVector<T*> vec;
public:
Container();
~Container(void);
int getSize() const;
T * operator[] (int);
T * operator() (int);
void operator <<(T*);
void operator >>(T*);
bool exists(T*);
signals:
void updateTable();
void updateTable(int,int);
void sizeSignal(int);
public slots:
void insert(T*);
void insert(int, T*);
void edit(QTableWidgetItem*);
void remove(int);
};
Как заставить это работать?
Пробовал что-то вроде этого:
template <class T>
class Container : public ContainerSignalsSlots
{
public:
Container();
~Container(void);
int getSize() const;
T * operator[] (int);
T * operator() (int);
void operator <<(T*);
void operator >>(T*);
bool exists(T*);
};
class ContainerSignalsSlots : public QObject
{
Q_OBJECT
protected:
QVector<T*> vec;
signals:
void updateTable();
void updateTable(int,int);
void sizeSignal(int);
public slots:
void insert(Class1*);
void insert(int, Class1*);
void insert(Class2*);
void insert(int, Class2*);
void edit(QTableWidgetItem*);
void remove(int);
};
Но как мне быть с QVector
?
QObject
классом шаблона. Однако вы можете использовать эту небольшую хитрость, чтобы обойти это ограничение. - person Dmitry   schedule 23.01.2017ContainerSignalsSlots
и реализовать их вContainer
. Таким образом, вам нужно будет получить доступ только кQVector
вContainer
. - person Dmitry   schedule 23.01.2017