day01 下
day01 下
自定义槽函数
Q_OBJECT如果没有这个宏是用不了信号槽的
这里有槽函数的限制具体看一下
#include "mainwidget.h"
MainWidget::MainWidget(QWidget *parent)
: QWidget(parent)
{
b1 = new QPushButton("老大",this);
b1->move(100,100);
b2= new QPushButton;
b2->setText("老二");
b2->setParent(this);
b2->move(200,200);
// 槽函数
// 1.槽函数在Qt5 可以是任意类成员函数,全局函数,静态函数,lambda表达式(隐式函数)
// 2.槽函数需要与信号对相应(返回值,参数)
// 3.信号没有返回值,槽函数返回值: void
// 4.信号:void mysig(int, double, OString);
// 槽函数:void myslot(int, double);
// 5.槽函数的参数是为了接受信号传过来的的数据
// 6.槽函数的参数应该是不能够大于信号的参数个数,可以少于信号的参数个数
// 7.槽函数可以重载
connect(b1,&QPushButton::clicked,this,&MainWidget::SlotFormainwindow);
}
MainWidget::~MainWidget()
{
}
void MainWidget::SlotFormainwindow(){
b2->setText("改变");
}
自定义信号
主界面跳转子界面代码如下:
b3 = new QPushButton("变化",this);
b3->resize(100,50);
b3->move(200,200);
connect(b3,&QPushButton::clicked,this,&MainWidget::slotHideMe);
void MainWidget::slotHideMe(){
hide();
subW.show();
}
子界面跳转就比较复杂
因为我们我们从子界面跳转到主界面,子界面的是没有办法直接控制子界面的因此需要需要发出信号,通过主界面来接受
首先要独立的写一个信号作为事件触发时的信号
signals:
//自定义信号
void sigsub();
// 可以有参数
// 可以重载
// 返回值为void
// 发送信号: emit + 信号名;
// emit sigsub
再通过子界面去链接按钮和发送信号的槽函数connect(b3,&QPushButton::clicked,this,&SubWidget::myslot);点击子界面按钮,然后子界面的槽函数发送一个信号(emit)
#include "subwidget.h"
SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
{
b3 = new QPushButton("变化",this);
b3->resize(100,50);
b3->move(200,200);
setWindowTitle("zhujiemian");
resize(400,600);
connect(b3,&QPushButton::clicked,this,&SubWidget::myslot);
}
void SubWidget::myslot(){
emit sigsub();
}
最后才在主界面改动
重载信号槽(槽函数也是这样重载)(QT5)
之前在代码注释中提到过信号槽是可以重载的
那也就意味着你的connect不能直接像之前那样写两遍了
参考函数指针的写法
而是得像这么写
connect(b3,&QPushButton::clicked,this,&MainWidget::slotHideMe);
void (SubWidget::*Mysigsub)()=&SubWidget::sigsub;
connect(&subW,Mysigsub,this,&MainWidget::slotshowMe);
void (SubWidget::*Mysigsub1)(int,QString)=&SubWidget::sigsub;
connect(&subW,Mysigsub1,this,&MainWidget::slotSubMsg);
QT4用的就是宏了(这里就不讲了)
信号槽拓展
lambda表达式(没有名字的函数)
https://blog.csdn.net/qq_37085158/article/details/124626913?
connect(b1,&QPushButton::clicked,this,[=](){
b2->setText("lamdba");
b3->hide();
});
UI界面
个人感觉这个和高中学过的VB很像,所以就不做过多介绍
可以直接观看视频:
https://www.bilibili.com/video/BV1t64y1f7d1?p=14&vd_source=4c026d3f6b5fac18846e94bc649fd7d0
这里面还讲了一些对话框的内容。