PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Q_OBJECT und templates



undefined
21-03-2008, 15:11
Stehe vor dem Problem das ich QMetaObject in einer Template Klasse benötige.
Weis aber nicht warum mir der Compiler das hier verweigert.


#ifndef HEDITTABLEWIDGET_H
#define HEDITTABLEWIDGET_H

#include <QObject>
#include <QString>
#include <QTabWidget>
#include <QTableView>

class QTableView;
class QSqlTableModel;
class QPushButton;
class QModelIndex;
class Connection;
class HTabWidget;
class HTableView;

template<class T>
class HEditTableWidget : public QTabWidget
{
Q_OBJECT

public:
HEditTableWidget( HTabWidget *parent = 0, const QString &name = 0, Connection *con = 0 );
virtual ~HEditTableWidget() {};

private:
HTableView *m_HTableView;
Connection *m_Connection;
QPushButton *btnSave, *btnRestore;
QSqlTableModel *m_QSqlTableModel;

};

#endif

Meldung:


HEditTableWidget.h:29: Fehler: Deklaration von »class T«
HEditTableWidget.h:26: Fehler: überdeckt Templateparameter »class T«

BLUESCREEN3D
21-03-2008, 15:36
Versuch doch mal, deinen Template-Parameter nicht T zu nennen.

locus vivendi
21-03-2008, 16:41
Stehe vor dem Problem das ich QMetaObject in einer Template Klasse benötige.
Weis aber nicht warum mir der Compiler das hier verweigert.
Das wird von Trolltech leider nicht unterstützt. Templates können das QObject-Makro nicht beinhalten. Das ist hier unter "Limitations" nachzulesen:
http://doc.trolltech.com/4.4beta/moc.html
So weit ich weiß, sagt die Dokumentation an der Stelle noch nicht die ganze Wahrheit, denn dort wird nur gesagt, dass Templates keine Signals oder Slots beinhalten können. Tatsächlich führt aber bereits Q_OBJECT selber zu Problemen.

undefined
21-03-2008, 17:33
Danke für den link, den werde ich jetzt mal durchlesen.
Habe es in der zwischenzeit dank KDE Repository über Umwege hinbekommen.


#ifndef HEDITTABLEWIDGET_H
#define HEDITTABLEWIDGET_H

#include <QObject>
#include <QString>
#include <QTabWidget>
#include <QTableView>
#include <QMetaType>

class QTableView;
class QSqlTableModel;
class QPushButton;
class QModelIndex;
class Connection;
class HTabWidget;
class HTableView;

class HEditTableWidget : public QTabWidget
{
Q_OBJECT

public:
HEditTableWidget( HTabWidget *parent = 0, const QString &name = 0, Connection *con = 0 );
template<class T> HEditTableWidget createObject( HTabWidget *parent = 0, const QString &name = 0, Connection *con = 0 );
virtual ~HEditTableWidget() {};

private:
HTableView *m_HTableView;
Connection *m_Connection;
QPushButton *btnSave, *btnRestore;
QSqlTableModel *m_QSqlTableModel;

};

template<class T>
HEditTableWidget HEditTableWidget::createObject( HTabWidget *parent,
const QString &name,
Connection *con )
{
return new HEditTableWidget( parent, name, con );
};

#endif