day01 下

day01 下

视频链接

自定义槽函数

Q_OBJECT如果没有这个宏是用不了信号槽的
img
这里有槽函数的限制具体看一下

#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("改变");
}

自定义信号

img

主界面跳转子界面代码如下:

    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();
}

最后才在主界面改动
img

重载信号槽(槽函数也是这样重载)(QT5)

之前在代码注释中提到过信号槽是可以重载的
img
那也就意味着你的connect不能直接像之前那样写两遍了
img
参考函数指针的写法
img
而是得像这么写

    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用的就是宏了(这里就不讲了)

信号槽拓展

img

lambda表达式(没有名字的函数)

https://blog.csdn.net/qq_37085158/article/details/124626913?
img

   connect(b1,&QPushButton::clicked,this,[=](){
      b2->setText("lamdba");
      b3->hide();
    });

UI界面

个人感觉这个和高中学过的VB很像,所以就不做过多介绍
可以直接观看视频:
https://www.bilibili.com/video/BV1t64y1f7d1?p=14&vd_source=4c026d3f6b5fac18846e94bc649fd7d0
这里面还讲了一些对话框的内容。
img

posted @   NoAcalculia  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示