Как решить проблему с шаблоном в Qt

Привет, я пытаюсь написать шаблонный класс в Qt, при этом я застрял с некоторыми ошибками, я прочитал несколько статей и начал строить пример в соответствии с моим требованием

template.h

#ifndef CSLCDTEMPLATE_H
#define CSLCDTEMPLATE_H

#include <QDialog>
#include <QTimer>
#include <QDebug>
#include <QList>
#include <QPixmap>
#include <QPalette>
#include <QStringList>template<class T>
class LcdTemplate : public QDialog
{
public:
LcdTemplate();
void display(T);
T Getalue();

private slots:
void display();
private:
int indexVal;
T m_Obj;
QStringList nameList;
};

#endif
// CSLCDTEMPLATE_H

template.cpp

#include "CSLcdTemplate.h"
extern QStringList display_list;

template <class T>
LcdTemplate<T>::LcdTemplate()
{
qDebug()<<"Inside the Constructor of LCD Template";

setWindowFlags(Qt::FramelessWindowHint);
#ifdef GL11_QT
setGeometry(0,0,320,240);
#endif
#ifdef GL11_GNOME
setGeometry(2,20,316,200);
#endif
setStyleSheet("background-color:yellow");

indexVal = 0;

QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(display()));
timer->start(500);

QTimer::singleShot(4000, this, SLOT(close()));
}

//template <class T>
void LcdTemplate::display()
{

nameList = display_list;
qDebug()<<"Data in"<<nameList;
display(nameList);

}

template <class T>
void LcdTemplate<T>::display(T list)
{
switch(indexVal)
{
case 0:
this->setStyleSheet(nameList.at(indexVal));
indexVal = 1;
break;
case 1:
this->setStyleSheet(nameList.at(indexVal));
indexVal = 2;
break;
case 2:
this->setStyleSheet(nameList.at(indexVal));
indexVal = 3;
break;
case 4:
this->setStyleSheet(nameList.at(indexVal));
indexVal = 4;
break;
case 5:
this->setStyleSheet(nameList.at(indexVal));
indexVal = 0;
break;
}
}

template <class T>
T TestTemp<T>::Getalue()
{
return m_Obj;
}

Ошибки, с которыми я сталкиваюсь:

CSLcdTemplate.cpp:29:6: error: 'template<class T> class LcdTemplate' used without template parameters
CSLcdTemplate.cpp: In function 'void display()':
CSLcdTemplate.cpp:32:5: error: 'nameList' was not declared in this scope
CSLcdTemplate.cpp: At global scope:
CSLcdTemplate.cpp:67:11: error: expected initializer before '<' token

Как я могу решить эту ошибку.

0

Решение

Не смешивайте класс шаблона и класс, отвечающий за сигналы и слоты. Увидеть QT: Шаблонный класс Q_OBJECT

Обратите внимание, что правильный синтаксис для определения члена класса шаблона

template <class T>
void LcdTemplate<T>::display()
{}

Обратите внимание, что вам нужно добавить макрос Q_OBJECT, чтобы сигнал и слоты работали.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]