首页 > 其他分享 >Qt的信号与槽

Qt的信号与槽

时间:2024-11-20 18:15:22浏览次数:3  
标签:Widget Qt void private connect 信号 public

1、信号与槽的定义

1.1 Qt信号定义

a)继承QObject或派生类,必须包含Q_OBJECT宏

b)使用关键字signals声明函数,不需要实现

c)使用emit发送信号

1.2 Qt槽定义

a)必须包含Q_OBJECT宏

b)使用关键字[public/protected/private] slots声明函数

c)需要实现声明的函数

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

// 信号
signals:
    void printLog(int a);

// 槽
private slots:
    void on_pushButton_clicked();
    void onPrintLog(int a);

private:
    Ui::Widget *ui;
};

1.3 总结

a)信号使用signals声明,不需实现,是public

b)槽public/protected/private slots声明,需要实现

c)信号槽使用connect进行连接

2、信号与槽的三种写法

2.1 SIGNAL/SLOT宏写法

connect(this, SIGNAL(printLog(int)), this, SLOT(onPrintLog(int)));

2.2 函数指针写法

connect(this, &Widget::printLog, this, &Widget::onPrintLog);

2.3 lambda写法

connect(this, &Widget::printLog, this, [=](){
            qDebug("this is lambda");
     });

2.4 总结

a)函数指针方式,在编译期就可发现错误,也支持隐式转换
b)推荐使用函数指针方式连接信号槽
c)如果信号槽函数有重载,推荐使用宏方式连接
d)对于短小槽函数的调用且功能不被复用,推荐使用lambda

3、信号与槽的自动绑定

3.1 直接使用设计器编辑

3.2 使用“转到槽”连接

3.3 自动绑定语法

void on_<对象名>_<信号名>(信号参数);

例:
void on_pushButton_clicked();

3.4 自动连接的弊端

当对象名、信号名或参数变化时,连接将失效,在编译器没有错误提示

标签:Widget,Qt,void,private,connect,信号,public
From: https://blog.csdn.net/2403_88489952/article/details/143921743

相关文章

  • 从0开始linux(32)——进程信号(1)信号发生
    欢迎来到博主的专栏:从0开始linux博主ID:代码小豪文章目录信号信号发生键盘发生的信号信号是如何发送给进程的?信号是如何发送给系统的?其他的信号发生由系统指令发生的信号由系统调用发生的信号由软件条件引发的信号由于进程异常引发的信号Core与Term默认行为的差别......
  • Qt - 多线程之并发(QtConcurrent)
    一、什么是QtConcurrent?Concurrent是并发的意思,而QtConcurrent同std一样,是一个命名空间(namespace)。提供了一些高级的API,使得在编写多线程的时候,无需使用低级线程原语,如读写锁,等待条件或信号。使用QtConcurrent编写的程序会根据可用的处理器内核数自动调整使用的线程数。对于QtC......
  • Qt - 多线程之线程同步
    一、线程为什么要同步使用两个线程对一个全局变量做累加,从0加到10,所以只要每个线程累加到5就行。代码如下所示:#include<QApplication>#include<QThread>#include<QDebug>//定义共享资源intsharedValue=0;//定义一个线程类classMyThread:publicQThread{pub......
  • Qt - 多线程之线程的开始、暂停、恢复、停止
    示例1在Qt中,可以使用QThread的线程控制功能来暂停和恢复一个线程。这里是一个简单的例子: #include<QThread>#include<QDebug>classWorkerThread:publicQThread{voidrun()override{qDebug()<<"Threadisrunning";//执行一些任务......
  • QT5.15.2 连接MySQL 驱动问题解决方案,无论菜鸟️还是老鸟,解决了就是好鸟
    最近在学QT,现在QT只能在线安装了,用了几天,看到数据库时,需要用MySQL,结果出现了问题。QSqlDatabase:QMYSQLdrivernotloaded、QSqlDatabase:availabledrivers:QSQLITEQODBCQODBC3QPSQLQPSQL7、Sqlconnectfailed、"DrivernotloadedDrivernotloaded"网上找到很多......
  • c-Kit/SCF信号轴概述及病理生理作用
    前 言受体酪氨酸激酶是正常细胞功能必不可少的,其功能障碍与多种疾病相关。c-Kit属于Ⅲ型受体酪氨酸激酶,参与细胞内信号传导。c-Kit及其配体SCF在胚胎发育和人类癌症的进展中发挥至关重要的作用。c-Kit/SCF的异常信号传导是某些癌症中癌症干性的重要促进因素。c-Kit的功能决......
  • Qt 重写paintEvent事件划线
    可以自定义一个类QtImageLabel继承于QLabel,重写paintEvent事件划线,写文字等。如果用ui设计,将QLabel控件提升为QtImageLabel类型即可。QtImageLabel.hprotected:voidpaintEvent(QPaintEvent*)override;QtImageLabel.cpp#pragmaexecution_character_set("utf-8......
  • MATLAB实现基于SVD奇异值分解的信号分解分量可视化
    目录项目背景介绍...1项目目标与意义...1项目挑战...2项目特点与创新...2项目应用领域...2项目效果预测图程序设计...3项目模型架构...3项目模型描述...5项目结构设计...6项目部署与应用...6项目扩展...7项目应该注意事项...7项目未来改进方向...7......
  • QT 实现表格展示第一列为CheckBox(复选框)
    1.界面实现效果在Qt中,如果你想要在QTableView中实现复选框展示数据,示例:实现第一列为复选框(checkBox),需要自定义的QAbstractTableModel,重写data和setData方法来返回和设置复选框的状态,并且还需要重写flags方法来允许复选框被点击。2.自定义CustomModel需要实现以下几个方......
  • Qt Label 显示图片
    一般这样子://跟随比例变化ui->label->setScaledContents(true);QPixmappixmap("./01.jpg");//pixmap.load("./01.jpg");//让图片大小适应控件大小,如果不需要,可以直接显示原图QPixmaps_img=pixmap.scaled(ui->label->size(),Qt::KeepAspectRatio,Qt::SmoothTran......