什么时候应该将子对象声明为qt中其父类的成员变量?

时间:2017-04-02 03:27:41

标签: c++ qt

//disconnect.h
#include <QWidget>
#include <QPushButton>

class Disconnect : public QWidget {

  Q_OBJECT  

  public:
    Disconnect(QWidget *parent = 0);

  private slots:
    void onClick();
    void onCheck(int);

  private:
    QPushButton *clickBtn;
};
//disconnect.cpp
#include <QTextStream>
#include <QCheckBox>
#include <QHBoxLayout>
#include "disconnect.h"

Disconnect::Disconnect(QWidget *parent)
    : QWidget(parent) {

  QHBoxLayout *hbox = new QHBoxLayout(this);
  hbox->setSpacing(5);        

  clickBtn = new QPushButton("Click", this);
  hbox->addWidget(clickBtn, 0, Qt::AlignLeft | Qt::AlignTop);

  QCheckBox *cb = new QCheckBox("Connect", this);
  cb->setCheckState(Qt::Checked);
  hbox->addWidget(cb, 0, Qt::AlignLeft | Qt::AlignTop);

  connect(clickBtn, &QPushButton::clicked, this, &Disconnect::onClick);
  connect(cb, &QCheckBox::stateChanged, this, &Disconnect::onCheck);  
}

void Disconnect::onClick() {

  QTextStream out(stdout);
  out << "Button clicked" << endl;
}

void Disconnect::onCheck(int state) {

  if (state == Qt::Checked) {
    connect(clickBtn, &QPushButton::clicked, this, &Disconnect::onClick);
  } else {
    disconnect(clickBtn, &QPushButton::clicked, this, 
        &Disconnect::onClick);
  }
}
//main.cpp
#include <QApplication>
#include "disconnect.h"

int main(int argc, char *argv[]) {

  QApplication app(argc, argv);  

  Disconnect window;

  window.resize(250, 150);
  window.setWindowTitle("Disconnect");
  window.show();

  return app.exec();
}

在上面的代码中,Disconnect对象有两个子对象 - 一个QPushButton和一个QcheckBox,但类Disconnect只有一个QPushButton指针,而不是QcheckBox指针。任何人都可以告诉我什么时候应该将子对象声明为qt中其父类的成员变量?

1 个答案:

答案 0 :(得分:1)

  

任何人都可以告诉我什么时候应该将子对象声明为a   qt中其父类的成员变量?

如果您认为需要从父类的其他方法调用(或以其他方式访问)子对象的方法(如您的示例代码对clickBtn所做的那样,则从onCheck方法引用它),然后你想创建一个成员变量,它是指向该子对象的指针,允许你这样做。

另一方面,如果您不需要在创建它的方法之外访问子对象,那么您可以通过声明指针指向以保持父类的定义更短更简单-child-object仅作为创建方法中的局部变量。