2022.8.31 作业

1、手动实现QT的对象树模型

#include <iostream>
#include <list>

using namespace std;

class ObjTree
{
public:
    ObjTree(ObjTree *parent=nullptr)
    {
        if(parent!=nullptr){
            parent->child().push_back(this);
        }
    }

    virtual ~ObjTree()
    {
        for(auto it=childlist.begin();it!=childlist.end();it++){
            delete *it;
        }
    }

    list<ObjTree *> &child()
    {
        return childlist;
    }
private:
    list<ObjTree *> childlist;
};

class A:public ObjTree
{
public:
    A(ObjTree *parent=nullptr)
    {
        if(parent!=nullptr){
            parent->child().push_back(this);
        }
    }
    ~A(){}
};

class B:public ObjTree
{
public:
    B(ObjTree *parent=nullptr)
    {
        if(parent!=nullptr){
            parent->child().push_back(this);
        }
    }
    ~B(){}
};

int main()
{
    A a;
    B *b=new B(&a);  //此时b依附于a

    return 0;
}

2、创建一个项目,提供三个按钮,第一个按钮功能是将第二个按钮设置为使能状态;第二个按钮实现播报第三个按钮的内容,播报结束后,设置自己不可用;第三个按钮的内容是关闭,实现功能是关掉整个项目。

ButtonTest.h

#ifndef BUTTONTEST_H
#define BUTTONTEST_H

#include <QWidget>
#include <QTextToSpeech>

QT_BEGIN_NAMESPACE
namespace Ui { class ButtonTest; }
QT_END_NAMESPACE

class ButtonTest : public QWidget
{
    Q_OBJECT

public:
    ButtonTest(QWidget *parent = nullptr);
    ~ButtonTest();

public slots:
    void do_enble();
    void do_speech();
    void do_close();

private:
    Ui::ButtonTest *ui;
    QTextToSpeech speech;
};
#endif // BUTTONTEST_H

ButtonTest.cpp

#include "buttontest.h"
#include "ui_buttontest.h"

ButtonTest::ButtonTest(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::ButtonTest)
{
    ui->setupUi(this);
    ui->SpeBtn->setEnabled(false);
    connect(ui->EnBtn,&QPushButton::clicked,this,&ButtonTest::do_enble);
    connect(ui->SpeBtn,&QPushButton::clicked,this,&ButtonTest::do_speech);
    connect(ui->CloBtn,&QPushButton::clicked,this,&ButtonTest::do_close);
}

ButtonTest::~ButtonTest()
{
    delete ui;
}

void ButtonTest::do_enble()
{
    ui->SpeBtn->setEnabled(1);
}

void ButtonTest::do_speech()
{
    speech.say(ui->CloBtn->text());
    ui->SpeBtn->setEnabled(false);
}

void ButtonTest::do_close()
{
    close();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值