2016-04-30 2 views
0

Je ne peux pas accéder à staticmetaobject et je ne sais pas pourquoi. J'aurais besoin d'aide.ne peut pas accéder à staticmetaobject

Voici le code

Les deux erreurs sont:

staticMetaObject is not a member of MainWIndow* 

Je me sens comme il a quelque chose à voir avec la liste, mais je ne suis pas sûr.

mainwindow.h

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 
#include "form.h" 

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 

    Form<MainWindow*>* form; 

private slots: 
    void on_pushButton_clicked(); 

private: 
    Ui::MainWindow *ui; 
}; 

#endif // MAINWINDOW_H 

mainwindow.cpp

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include <QDebug> 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    /*qDebug() << MainWindow::staticMetaObject.className(); 

    if (QString(MainWindow::staticMetaObject.className()) == QString("MainWindow")) { 
     qDebug() << "test"; 
    }*/ 

    form = new Form<MainWindow*>(this); 

} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 

void MainWindow::on_pushButton_clicked() 
{ 
    form->myFunc(); 
} 

form.h

#ifndef FORM_H 
#define FORM_H 
#include <QObject> 
#include <QDebug> 

class FormBase : public QObject 
{ 
    Q_OBJECT 
public: 
    FormBase() {} 
}; 

template <typename T> 
class Form : public FormBase, public QList<T> 
{ 
public: 
    Form(T a) 
    { 
     QList<T>::append(a); 
    } 

    void myFunc() 
    { 
     qDebug() << T::staticMetaObject.className(); 
    } 
}; 

#endif // FORM_H 

Répondre

1

Vous vous obtenez types confus.

Vous voulez T être MainWindow afin que vous puissiez faire

T::staticMetaObject.className() 

Cela signifie que vous voulez un QList<T*>. Vous dérivez de ce que vous pouvez simplement appeler

append(a); 

Le code suivant compile bien:

class FormBase : public QObject 
{ 
    Q_OBJECT 
public: 
    FormBase() {} 
}; 

template <typename T> 
class Form : public FormBase, public QList<T*> 
{ 
public: 
    Form(T* a) 
    { 
     append(a); 
    } 

    void myFunc() 
    { 
     qDebug() << T::staticMetaObject.className(); 
    } 
}; 

class MainWindow: 
    public QMainWindow 
{ 
    MainWindow() 
    { 
     form = new Form<MainWindow>(this); 
    } 

    FormBase* form; 
}; 
+0

Je ne sais pas comment vous dire cela. Je dois remplir <> ou j'obtiens une erreur de compilation (spécificateur attendu avant le formulaire). Vous avez raison, le problème est que T est T * et c'est pourquoi staticMetaObject ne fonctionne pas. Mais je ne comprends pas votre réponse – Invader

+0

puis j'obtiens le spécificateur d'erreur prévu avant le formulaire. Je ne veux pas que ce soit en tant que parent, peut-être vous missundertsnad. Je le veux comme un pointeur dans la liste. – Invader

+0

Ahh: vous continuez à changer votre code. Je vais ajuster. – Thomas