Qt信号和槽函数的四种实现方式

1、以按钮为例,首先添加一个按钮,对象名为pushButton,在按钮是右键单击选择“转到槽”即可,在转到槽选择面板(右图)里面选择需要进行的操作,比如单击clicked()

               

2、选择菜单“编辑”,找到Edit Signals/Slots,或者在工具栏中找到第二项(第二张图),然后拖动按钮并释放,

   

弹出“配置连接”选项,选择需要进行的操作即可。

3、自定义:以按钮为例,使用connect

在头文件中添加:

private slots:

void on_button1_clicked();

在.cpp文件下面的构造函数中添加:

connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(on_button1_clicked()));

接着实现槽函数即可。

4、不用写connect:

Qt信号和槽函数的命名是有规则的,组成为on_对象名_信号,以按钮为例,如果对象名为pushButton,在你在写槽函数的时候按照这种规则,则

在头文件中添加:

private slots:

void on_pushButton_clicked();

在.cpp文件下面的构造函数中就不用写connect了,直接写槽函数的实现就能实现信号和槽的连接。

 

 

 

 

  • 46
    点赞
  • 174
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Qt中的信号实现对象间通信的机制,可以在不同的对象之间传递信息。下面是一个简单的模拟实现: 1. 定义信号类,该类定义一个信号名称和参数类型: ```cpp class Signal { public: Signal(const QString& name, const QList<QVariant>& args) : m_name(name), m_args(args) {} QString name() const { return m_name; } QList<QVariant> args() const { return m_args; } private: QString m_name; QList<QVariant> m_args; }; ``` 2. 定义类,该类定义一个函数名称和参数类型: ```cpp class Slot { public: Slot(const QString& name, const QList<QVariant>& args) : m_name(name), m_args(args) {} QString name() const { return m_name; } QList<QVariant> args() const { return m_args; } void call(const QList<QVariant>& args) { // 实现函数的调用 } private: QString m_name; QList<QVariant> m_args; }; ``` 3. 定义连接类,该类表示一个信号之间的连接: ```cpp class Connection { public: Connection(Signal* signal, Slot* slot) : m_signal(signal), m_slot(slot) {} Signal* signal() const { return m_signal; } Slot* slot() const { return m_slot; } private: Signal* m_signal; Slot* m_slot; }; ``` 4. 定义对象类,该类包含信号的实例: ```cpp class Object { public: void connect(Signal* signal, Slot* slot) { Connection connection(signal, slot); m_connections.append(connection); } void emit(Signal* signal) { foreach (const Connection& connection, m_connections) { if (connection.signal() == signal) { connection.slot()->call(signal->args()); } } } private: QList<Connection> m_connections; }; ``` 5. 使用对象类进行信号的连接和调用: ```cpp Object obj1, obj2; Signal* signal = new Signal("mySignal", QList<QVariant>() << 42 << "hello"); Slot* slot = new Slot("mySlot", QList<QVariant>() << 0 << ""); obj1.connect(signal, slot); obj2.connect(signal, slot); obj1.emit(signal); ``` 这样就模拟实现Qt中的信号机制。需要注意的是,Qt中的信号还有一些高级特性(如信号的重载、连接类型等),本模拟实现只是一个简单的示例。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值