使用QObject属性的指针

时间:2013-01-02 18:47:54

标签: c++ qt pointers qobject

自从我学习了Qt以来,我一直感到困惑的是,在我阅读的文档和书籍中,他们使用指针作为QObject子类实例的属性,例如小部件。

我知道QObjects删除了他们的孩子,但我们不应该避免使用指针,除非它真的有必要吗?

这是一个我不使用指针的工作示例:

Widget.h文件:

#include <QSlider>
#include <QLabel>
#include <QVBoxLayout>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);

public slots:
    void change(int);
private:
    QSlider m_slider;
    QLabel m_label;
    QVBoxLayout m_layout;
};

和Widget.cpp文件:

#include "Widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , m_slider(Qt::Horizontal)
    , m_label("0")
    , m_layout(this)
{
    m_layout.addWidget(&m_slider);
    m_layout.addWidget(&m_label);

    connect(&m_slider, SIGNAL(valueChanged(int)), this, SLOT(change(int)));
}

void Widget::change(int n){
    m_label.setText(QString::number(n));
}

这里唯一的区别是我必须在Widget.h文件中包含标题,这是使用指针的原因吗?

我想补充一点,我在StackOverflow上看到了一些类似的问题,但答案是小部件应该存在于函数调用之间,但是在将它们用作属性时就可以实现。

2 个答案:

答案 0 :(得分:5)

这里似乎对这个问题进行了相当冗长的讨论:
Class member: pointer or variable?

此链接中的一些要点谈到:

  • 长寿与短生物
  • 堆与堆栈
  • 基于对象上设置的父项保证析构函数的顺序

这里的消失似乎并不是一个硬性规则,而是一个个案的基础。因为我目前也从PyQt迁移 - &gt; Qt和拿起我的C ++,到目前为止我的有限观点是我总是使用指针作为QObject子类的类成员。我只是觉得我知道它们只会被Qt父母 - >儿童破坏过程摧毁。

同样,这是一个有限的观点。我相信具有强大C ++经验的人可以提供更好的答案。但我提到的链接确实包括非常有经验的Qt程序员。

答案 1 :(得分:0)

可能只是使用与默认构造函数不同的构造函数?