не может получить доступ к staticmetaobject

Я не могу получить доступ к staticmetaobject, и я не знаю почему. Мне нужна помощь.

Вот код

Две ошибки:

staticMetaObject is not a member of MainWIndow*

Я чувствую, что это как-то связано со списком, но я не уверен.

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

0

Решение

Вы вводите вас в заблуждение.

Ты хочешь T быть MainWindow так что вы можете сделать

T::staticMetaObject.className()

Это означает, что вы хотите QList<T*>, Вы выводите из этого, поэтому вы можете просто позвонить

append(a);

Следующий код компилируется нормально:

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;
};
2

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

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

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