Qt学习笔记 信号和槽

槽和普通c++成员函数一样只可以为虚函数,也可以被重用,可以是公有的也可以是私有的,也可以被其它的c++函数调用;

参数也是任意的

唯一不同的是本槽和信号是可以连在一起的,和c#的事件差不多。相连后每当发射这个信号后就会自动调用这个槽

connection(sender,SIGNAL(signal),receiver,SLOT(slot));

sender就发送信号的Qobject指针

receiver是槽的Qobject指针

signal和slot是只有形参的函数名。SIGNAL和SLOT宏会把它们的参数转换为相应的字符串

 

1.一个信号可以连接多个槽

在发射信号的时候顺序不确定

.h

    private slots:
        void Open1();
        void Open2();

.app

myQt::myQt(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    QObject::connect(ui.btn_Open,SIGNAL(clicked()),this,SLOT(Open1()));
    QObject::connect(ui.btn_Open,SIGNAL(clicked()),this,SLOT(Open2()));
}

void myQt::Open1()
{
    QMessageBox msg;
    msg.setText("Open1!");
    msg.exec();
}
void myQt::Open2()
{
    QMessageBox msg;
    msg.setText("Open2!");
    msg.exec();
}

 

2.多个信号可以连接同一个槽

QObject::connect(ui.btn_Open,SIGNAL(clicked()),this,SLOT(Open1()));
    QObject::connect(ui.btn_ClickBool,SIGNAL(clicked()),this,SLOT(Open1()));

3.一个信号可以与另外一个信号相连

    QObject::connect(ui.btn_Open,SIGNAL(clicked()),ui.btn_ClickBool,SLOT(click()));

4连接可以被删除

删除所有的连接

    QObject::disconnect(ui.btn_Open,0,0,0);
    //或者
    ui.btn_Open->disconnect();

删除指定的连接

    QObject::disconnect(ui.btn_Open,SIGNAL(clicked()),0,0);
    //或者
    ui.btn_Open->disconnect(SIGNAL(clicked()));

删除两个关联对象的连接

    QObject::disconnect(ui.btn_Open,0,ui.btn_ClickBool,0);
    //或者
    ui.btn_Open->disconnect(ui.btn_ClickBool);

 

要把信号成功的连接到槽(或者是连接到另外一个信号),它们的参数必须具有相同的顺序和相同的类型。

这里有个例外,如果信号的参数比它所连接的槽的参数多,那么多余的参数将会被忽略

 

 

时间: 2024-09-25 07:00:27

Qt学习笔记 信号和槽的相关文章

Qt学习笔记 TableWidget使用说明和增删改操作的实现

看一下效果很简单的一个小功能 先说分部讲一下过程 再给出详细代码  添加数据 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->tableWidget->setColumnCount(2); ui->tableWidget->setRowCount(2); ui->tableWidget->se

Qt学习笔记网络(一)

Qt5 移除了QHttp是因为功能重复 用QNetworkAccessManager完全能搞定 新建一个控制台应用程序 看一下QNetworkAccessManager的帮助文档 需要添加Qt + =network 新建一个类 .h文件 #ifndef DOWNPAGES_H #define DOWNPAGES_H #include<QNetworkAccessManager> #include <QObject> class DownPages : public QObject

Qt学习笔记 ListWidget的增删改

学习了一下ListWidget控件的使用,做一个小功能增删改 先把代码分解最后给出完整代码 在窗体上添加一个ListWidget 一个Horizontal Specer和  三个PushButton 效果如下 因为构造函数中的SetupUi(this)会自动将符合on_objectName_signalName()命名 的任意槽与相应的objectName的signalName()信号连接到一起 我就直接在.h文件里添加槽的声明  private slots: void on_btn_AddEv

【Qt编程】Qt学习笔记&amp;lt;三&amp;gt;

1.      如果程序中使用了png以外格式的图片,在发布程序时就要将Qt安装目录下plugins中的imagineformats文件复制到发布文件中. 2.      在函数声明处快速添加函数定义可单击函数名,按下alt+Enter键后,按下Enter键就可以进入到函数定义部分. 3.      关联槽和信号的两种方法:1.直接在设计器中用鼠标拖拽,适合于设计器中的部件间进行.2.在设计器中右击部件进入转到槽,这种方法是自动关联. 4.      我们在进行编程时,应注意:一个文件.一个类.

Qt 学习笔记 TreeWidget 增删改

在窗体上放一个TreeWidget控件和四个PushButton加一个Horizontal Spacer 布局如图 给树添加元素节点的方法和实现 .h文件 QTreeWidgetItem * AddTreeRoot(QString name,QString desc); QTreeWidgetItem * AddTreeNode(QTreeWidgetItem *parent,QString name,QString desc); .cpp文件 QTreeWidgetItem * TreeVie

Qt学习笔记 线程(一)

Qt中的线程是与平台无关的 QThread 提供了创建一个新线程的方法 新建一个线程,继承QThread并重写它的run()当调用 start()函数时会调用重载的run()函数 例: #ifndef MYTHREAD_H #define MYTHREAD_H #include <QThread> class MyThread : public QThread { Q_OBJECT public: bool stop ; explicit MyThread(QObject *parent =

Qt学习笔记常用容器

主要说Qt的以下几种容器 1.QList<T> 2.QLinkedList<T> 3.Map<T> 和一些常用的容器方法的使用 qSort qCopy qFind 1.QList<T>泛型集合是最常用的一种容器 看一下它的常用 操作 添加删除和两个迭代器 QListIterator和QMutableListIterator #include <QCoreApplication> #include<QList> #include<

Qt学习笔记 QMessageBox

Qt的几种MessageBox 1.Infomation类型 QMessageBox::information(this,tr("hello"),tr("title")); 2.Question类型 QMessageBox::StandardButton returnBtn; returnBtn = QMessageBox::question(this,tr("hello have problem?"),tr("error!"

在Qt Creator 和在 vs2012 里添加信号和槽

Qt  的窗口部件通过发射信号(signal)来表明一个用户的动作已经发生了或者是一个状态已经改变了. 如点击一个QPushButton时,按钮会发送一个clicked()信号,信号可以与函数(在qt里称做槽slot)相连接 可以把信号理解为c#里的事件 在vs2012里和在Qt Creator里添加信号和槽不一样,这里把两种环境下怎么添加详细说明一下   1.在vs2012里添加信号和槽 新建一个qt的项目QtDemo   在qtdeom.h里添加槽 private slots: void B