//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中其父类的成员变量?
答案 0 :(得分:1)
任何人都可以告诉我什么时候应该将子对象声明为a qt中其父类的成员变量?
如果您认为需要从父类的其他方法调用(或以其他方式访问)子对象的方法(如您的示例代码对clickBtn
所做的那样,则从onCheck
方法引用它),然后你想创建一个成员变量,它是指向该子对象的指针,允许你这样做。
另一方面,如果您不需要在创建它的方法之外访问子对象,那么您可以通过声明指针指向以保持父类的定义更短更简单-child-object仅作为创建方法中的局部变量。