【问题标题】:Constructor is private?构造函数是私有的?
【发布时间】:2011-09-13 16:12:03
【问题描述】:

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)
{

}

ma​​inwindow.h

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow();

private slots:
    ...

signals:
    ...

private:
    ...
    myModel *model;
};

ma​​inwindow.cpp:

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

谢谢。

【问题讨论】:

  • 在此处的文档中:doc.trolltech.com/4.5/moc.html#moc 和您的 mainwindow.h 中,我看到了在 public: 之前使用的 Q_OBJECT。在 mymodel.h 中,public: 后面有它。宏是否有可能重新引入private:?尝试将它移到public: 之前,看看它是否能解决您的问题。

标签: qt constructor private


【解决方案1】:

我首先要说的是,我刚刚浏览了 SO 以了解其他 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?

【讨论】:

  • 呵呵。当然。你说的对。如果你看一下 Q_OBJECT 宏,它从private: 开始。所以构造函数也在私有部分中
  • 甜蜜。这是我在评论中的猜测。鉴于错误,这似乎是一个合乎逻辑的猜测。
猜你喜欢
  • 2019-10-16
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多