QT5添加控件,信号和槽

2020-03-18  本文已影响0人  钊明

学习来自https://www.bilibili.com/video/av34085761?p=11
添加控件的头文件 <QPushButton>

//如果不指定父窗口,对象和对象(窗口和控件)是独立的

1.setParent

2.通过构造函数传参

指定父对象,只需要父对象显示,上面的子对象自动显示,如下:

QWidget w; //父对象==>窗口

QPushButton b; //子对象==>控件  也可以b(&w);

b.setParent(&w);//指定父对象

b.setText("标题");

b.move(100,100);//设置控件移动坐标

信号和槽

如在构造函数MainWidgrt中在.h声明QPushButton b1;

MainWidget::MainWidget(QWidget *parent)

:QWidget(parent)

{

    b1.setParent(this);

    b1.setText("close");

    connect(&b1, &QPushButton::pressed, this, &MainWidget::close);

/*&b1: 信号发出者,指针类型

*&QPushButton::pressed:处理的信号,  &发出者的类名::信号名字

*this : 信号接收者

*&MainWidget::close: 槽函数,处理的信号函数,&接收者的类名::信号名字

*/

//在.h类中声明函数void Qsend();

    connect(&b1, &QPushButton::pressed, this, &MainWidget::Qsend);

/*自定义槽,普通函数的用法

*QT5:任意的成员函数,普通全局函数,静态函数

*槽函数需要和信号一致(参数,返回值)

*由于信号都是没有返回值,所以槽函数一定没有返回值

*/

}

//两个窗口间的信号传递

//在其.h中声明SubWidget w;和声明信号处理函数void dealSub();

  MainWidget::MainWidget(QWidget *parent)//窗口1

:QWidget(parent)

{

    this->setWindowTitle("老大");

    b1.setParent(this);

    b1.setText("切换到子窗口");

//处理子窗口的信号

    connect(&w,&SubWidget::mySignals, this, &MainWidget::dealSub);

    resize(300,300);//定义窗口大小

}

//在创建一个类窗口继承QWidget,在其.h中的signals:声明void mySignals();

//和声明信号函数void sendSlot();

/*信号必须有signals关键字

*信号没有返回值,但可以有参数

*信号就是函数的声明,只需声明,无需定义

*使用: emit mySignals();

*/

  MainWidget::SubWidget(QWidget *parent)//窗口2

:QWidget(parent)

{

this->setWindowTitle("小弟");

    b.setParent(this);

    b.setText("切换到主窗口");

    connect(&b, &QPushButton::clicked, this,$SubWidget::sendSlot);

    resize(300,300);//定义窗口大小

}

void MainWidget::sendSlot()

{

    emit mySignals();

}

上一篇下一篇

猜你喜欢

热点阅读