QT5添加控件,信号和槽
学习来自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();
}