自从我学习了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上看到了一些类似的问题,但答案是小部件应该存在于函数调用之间,但是在将它们用作属性时就可以实现。
答案 0 :(得分:5)
这里似乎对这个问题进行了相当冗长的讨论:
Class member: pointer or variable?
此链接中的一些要点谈到:
这里的消失似乎并不是一个硬性规则,而是一个个案的基础。因为我目前也从PyQt迁移 - &gt; Qt和拿起我的C ++,到目前为止我的有限观点是我总是使用指针作为QObject子类的类成员。我只是觉得我知道它们只会被Qt父母 - >儿童破坏过程摧毁。
同样,这是一个有限的观点。我相信具有强大C ++经验的人可以提供更好的答案。但我提到的链接确实包括非常有经验的Qt程序员。
答案 1 :(得分:0)
可能只是使用与默认构造函数不同的构造函数?