Qt编程之自定义信号与槽(二)

本文介绍如何在Qt中自定义信号与槽,并通过实例演示如何通过发射自定义信号来改变窗口标题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下程序在vs2010+qt插件中运行正确。

一、只自定义槽

格式:

1.在.h文件中定义如下

private slots:  //实际这是一个宏

      type slotName(arg);//和普通的成员函数一样,需要在.cpp文件中写其实现

2.在.cpp中写其实现

    type ClassName::slotName(arg)

  {

     //你的实现

  }

3.在.cpp中的构造函数中调用connect函数,该函数是QObject类的静态方法

ClassName::ClassName()

{

    ui.setup();

    QObject::connect(sender,SIGNAL(你要使用的信号),rece,SLOT(slotName(arg));

}


二、既定义信号也定义槽

需注意的几点:

1.自定义的信号不需要在.cpp中实现,只需在.h中有声明即可,否则会报如下错误:error LNK2005: "protected: void __thiscall ClassName::signalName(参数)" (?signalName@ClassName@@IAEXVQString@@@Z) 已经在 moc_signal_slot.obj 中定义
1>Q:\VS2010Projects\Qt\Signal_Slot\Win32\Debug\\Signal_Slot.exe : fatal error LNK1169: 找到一个或多个多重定义的符号

2.发射信号使用emit


例子:现在通过点击一个按钮,改变窗口的标题,但通过发射自定义信号的方法

1.在.h文件中定义如下:

private slots:

   void changeWindowTitle(QString title);//真正用来改变窗口标题的槽

  void on_clickButton_Slot();//用来响应按钮clicked信号的槽,在其中发射自定义信号titleMessageSignal

signals:

  void titleMessageSignal(QString title);//自定义的信号,带参数

2.在.cpp文件中实现如下:

void ClassName::changeWindowTtile(QString title)

{

   this->setWindowTtile(title);

}


void ClassName::on_clickButton_Slot()

{

   emit this->titleMessageSIgnal("你想要使用的窗口标题");//发射信号

}

在构造函数中调用connect

QObject::connect(this,SIGNAL(tithleMessageSignal(QString),this,SLOT(changeWindowTitle(QString));



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值