1、手动实现对象树模型
#include <iostream>
#include <list>
using namespace std;
class Tree
{
private:
list<Tree*> childList;
public:
Tree(Tree* p = nullptr)
{
if(p!=nullptr)
{
p->childList.push_back(this);
}
cout<<"Tree::构造函数"<<endl;
}
virtual ~Tree()
{
for(auto it=childList.begin();it!=childList.end();it++)
{
delete *it;
}
cout<<"Tree::析构函数"<<endl;
}
list<Tree*> child()
{
return childList;
}
};
class A:public Tree
{
public:
A(Tree* p = nullptr)
{
if(p!=nullptr)
{
p->child().push_back(this);
}
cout<<"A::构造函数"<<endl;
}
~A()
{
cout<<"A::析构函数"<<endl;
}
};
class B:public Tree
{
public:
B(Tree* p = nullptr)
{
if(p!=nullptr)
{
p->child().push_back(this);
}
cout<<"B::构造函数"<<endl;
}
~B()
{
cout<<"B::析构函数"<<endl;
}
};
int main()
{
B b1;
A a1(&b1);
A a2 = new A(&b1);
return 0;
}
2、创建一个项目,提供三个按钮,第一个按钮实现播报第二个按钮的内容,播报结束后,设置自己不可用。第二个按钮的内容是关闭,实现功能是关掉整个项目,第三个按钮功能是将第一个按钮设置为可以状态
头文件
#ifndef MYWND_H
#define MYWND_H
#include <QWidget>
#include <QPushButton>
#include <QTextToSpeech>
class MyWnd : public QWidget
{
Q_OBJECT
public slots:
void msg();
public:
MyWnd(QWidget *parent = nullptr);
~MyWnd();
QPushButton *btn1;
QPushButton *btn2;
QPushButton *btn3;
QTextToSpeech speech;
};
#endif // MYWND_H
mywnd.cpp
#include "mywnd.h"
void MyWnd::msg()
{
speech.say(btn2->text());
btn2->setEnabled(false);
}
MyWnd::MyWnd(QWidget *parent)
: QWidget(parent)
{
this->resize(1000,500);
this->setFixedSize(1000,500);
btn1 = new QPushButton("可用",this);
btn1->resize(75,30);
btn2 = new QPushButton("播报",this);
btn2->resize(75,30);
btn2->move(width()/2,height()/2);
btn1->move(width()/2-btn2->width(),height()/2);
btn3 = new QPushButton("关闭",this);
btn3->resize(75,30);
btn3->move(width()/2+btn2->width(),height()/2);
connect(btn2,&QPushButton::clicked,this,&MyWnd::msg);
connect(btn1,&QPushButton::clicked,[&](){
btn2->setEnabled(true);
});
connect(btn3,&QPushButton::clicked,[&](){
this->close();
});
}
MyWnd::~MyWnd()
{
}