【问题标题】:Qt subclassing from QWidgetQWidget 的 Qt 子类化
【发布时间】:2011-12-26 08:19:49
【问题描述】:

我编写了自己的类,它是 QWidget 的子类 这是我的头文件

#ifndef GRAPHMATRIX_H
#define GRAPHMATRIX_H

#include "treemodel.h"
#include <QWidget>
#include <Qt/qtableview.h>

class GraphMatrix : public QWidget
{
    Q_OBJECT
public:
    TreeModel& getModel();
    GraphMatrix(QWidget* parent = 0);
    void addTop(QString name);
    void cutComponent(GraphMatrix* component, QVector<int> columns);
private:
    TreeModel model;
    QTableView* view;
public slots:
    void changeValue(const QModelIndex& index);
};

#endif // GRAPHMATRIX_H

我收到了这个错误

error C2248: 'QWidget::QWidget' : cannot access private member declared in class 'QWidget'

谁能帮帮我?

更新添加:我找到答案,问题出在 QList 我必须写 QList。因为 QList 正在使用复制构造函数。感谢您花时间解决我的问题

【问题讨论】:

  • 你能告诉我们你的构造函数代码吗?

标签: qt subclassing


【解决方案1】:

看起来您正在尝试调用私有的 QWidget 的默认构造函数。相反,您的构造函数需要调用 QWidget 的公共构造函数,如下所示:

GraphMatrix::GraphMatrix(QWidget* parent) : QWidget(parent) {}

【讨论】:

  • 但是 QWidget 确实有一个不带参数的构造函数(或者更确切地说,它带参数但提供默认值)。
  • 我猜他正试图访问其他私有的东西。我们必须等到他发布更多代码。
【解决方案2】:

我找到答案,问题出在 QList 我必须写 QList。因为 QList 正在使用复制构造函数。感谢您花时间解决我的问题

【讨论】:

  • 我将其编辑到原始问题中,这样人们就不会在上面浪费时间了。希望你不要介意。
  • 听起来你在做QList&lt;GraphMatrix&gt;,而你应该做QList&lt;GraphMatrix*&gt;。保留不是指针的QObject列表通常不是一个好主意。
猜你喜欢
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
  • 2013-09-14
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
  • 2014-11-19
  • 1970-01-01
相关资源
最近更新 更多