2017-03-22 4 views
0

こんにちは私は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; 
} 

エラーが

01です

どうすればこのエラーを解決できますか?

+0

cppファイルのテンプレート実装??? [ここ](https://isocpp.org/wiki/faq/templates#templates-defn-vs-decl)を見てください。しかし、あなたはまだこれを行うことができますいくつかの限られたケースがありますが、一般的に失敗するでしょう。 – Aconcagua

答えて

0

テンプレートクラスとシグナルとスロットを担当するクラスを混在させないでください。テンプレートクラスのメンバーの定義のための正しい構文は、あなたが仕事をする信号とスロットのためにもQ_OBJECTマクロを追加する必要があり

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

注意があることをQT : Templated Q_OBJECT class

注を参照してください。

+0

テンプレートであるQObjectを作成できないと思っていました。最近変わったのですか? –

+0

私はあまりにも解決策を探している間、いくつかの記事を読んで、私は継承を使用して例を構築しようとしていますが、私は継承を使用して達成することができませんでした。 – Mounika

+0

@モーニカはしません。あなたはあなたが相続が必要だと思う理由を引き出すことができますか? – UmNyobe

関連する問題