构造函数是私有的吗?

时间:2011-06-13 04:23:54

标签: qt constructor private

C:/ QT /.../ mymodel.h:-1: 在成员函数'void MainWindow :: createModel()':

错误:'myModel :: myModel(QObject *)'是私有的

错误:在此上下文中

mymodel.h:

#ifndef MYMODEL_H
#define MYMODEL_H

#include <QStandardItemModel>

class myModel : public QStandardItemModel
{
public:
    Q_OBJECT

    myModel(QObject *parent = 0);
};

#endif // MYMODEL_H

mymodel.cpp:

#include "mymodel.h"

myModel::myModel(QObject *parent) :
    QStandardItemModel(parent)
{

}

mainwindow.h

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow();

private slots:
    ...

signals:
    ...

private:
    ...
    myModel *model;
};

mainwindow.cpp:

void MainWindow::createModel()
{
    model = new myModel(this);

感谢。

1 个答案:

答案 0 :(得分:4)

我将在前言中说我只是浏览了其他Qt问题,然后偶然发现了下面的文档网站,以达到这个猜测。

来自http://doc.qt.digia.com/4.5/qobject.html#Q_OBJECT

  

Q_OBJECT宏必须出现在类定义的私有部分中,该部分定义声明自己的信号和插槽,或者使用Qt的元对象系统提供的其他服务。

我猜你应该在mymodel.h中的public:之前移动它

这是我以前发现的SO帖子:

What does the Q_OBJECT macro do? Why do all Qt objects need this macro?