8.31 C++手动实现对象树模型与QT入门

文章目录

    • 一、手动实现对象树模型
      • 代码示例
    • 二、QT入门
      • 代码示例
        • mywidget.cpp
        • mywidget.h
      • 测试结果

一、手动实现对象树模型

代码示例

#include 
#include
using namespace std;
class ObjTree
{
private:
    list<ObjTree *> childList;       //存放子对象的指针链表
public:
    ObjTree(ObjTree *parent = nullptr) {
        if(parent != nullptr)
        parent->childList.push_back(this);
    }
    virtual ~ObjTree()
    {
        for (auto it=childList.begin(); it!=childList.end(); ++it) {
            delete *it;
        }
    }
    list<ObjTree *> & child()
    {
        return childList;
    }
};
//定义子类
class A:public ObjTree
{
public:
    A(ObjTree *parent = nullptr)
    {
        if(parent != nullptr)
        {
            parent->child().push_back(this);
        }
        cout<<"A::构造函数"<<endl;
    }
    virtual ~A()
    {
        cout<<"A::析构函数"<<endl;
    }
};
class B:public ObjTree
{
public:
    B(ObjTree *parent = nullptr)
    {
        if(parent != nullptr)
        {
            parent->child().push_back(this);

        }
        cout<<"B::构造函数"<<endl;
    }
    virtual ~B()
    {
        cout<<"B::析构函数"<<endl;
    }
};

int main()
{
    B b;           //实例化b这个控件
    A *a = new A( &b );   //此时a依附于b

    return 0;
}

二、QT入门

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

代码示例

mywidget.cpp

#include "mywidget.h"

void MyWidget::sayMsg()
{
    speech.say(btn3->text());
    btn2->setEnabled(false);
}

MyWidget::MyWidget(QWidget *parent): QWidget(parent)
{
    this->setFixedSize(1000,800);
    this->setWindowTitle("可用-播报-关闭");
    btn1 = new QPushButton("可用",this);
    btn1->resize(75,30);
    //btn1->move(this->width()/2-btn2->width(),this->height()/2);
    btn2 = new QPushButton("播报",this);
    btn2->resize(btn1->size());
    btn2->move(this->width()/2,this->height()/2);
    btn1->move(this->width()/2-btn2->width(),this->height()/2);
    btn3 = new QPushButton("关闭",this);
    btn3->resize(btn1->size());
    btn3->move(this->width()/2+btn2->width(),this->height()/2);
    connect(btn1,&QPushButton::clicked,[&](){
        speech.say("播报按钮已可用");
       btn2->setEnabled(true);
    });
    connect(btn2,&QPushButton::clicked,this,&MyWidget::sayMsg);
    connect(btn3,&QPushButton::clicked,[&](){
        this->close();
    });
}
MyWidget::~MyWidget()
{
}

mywidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H
#include 
#include 
#include
class MyWidget : public QWidget
{
    Q_OBJECT
public slots:
    void sayMsg();
public:
    MyWidget(QWidget *parent = nullptr);
    ~MyWidget();

    QPushButton* btn1;
    QPushButton* btn2;
    QPushButton* btn3;

    QTextToSpeech speech;
};
#endif // MYWIDGET_H

测试结果

8.31 C++手动实现对象树模型与QT入门_第1张图片

你可能感兴趣的:(C++/QT,c++,qt,开发语言)