Qt中 QObject * sender() const的用法

在项目中用到了此功能,作为一个记录,如下:

在项目中用到了多个按钮,但是只定义了一个槽函数,需要知道是哪个按钮发送的点击信号,所以使用该函数进行确认。、

官网给的说明是:

Returns a pointer to the object that sent the signal, if called in a slot activated by a signal。(如果在信号激活的插槽中调用,则返回指向发送信号的对象的指针)

 如下所示: 

 1   QPushButton *btn_1 = new QPushButton;
 2   connect(btn_1, SIGNAL(click()), this, SLOT(btn_click_slot()));
 3 
 4   QPushButton *btn_2 = new QPushButton;
 5   connect(btn_2, SIGNAL(click()), this, SLOT(btn_click_slot()));
 6 
 7   void btn_click_slot() {
 8     //如果点击btn_1,则此处btn指向btn_1;如果点击btn_2,则btn指向btn_2
 9     QPushButton *btn = qobject_cast<QPushButton *>(sender());
10   }

Qt官方说明:

d

 翻译如下:

如果在信号激活的插槽中调用,则返回指向发送信号的对象的指针;否则返回nullptr。指针仅在从对象的线程上下文调用此函数的插槽执行期间有效。

如果发送方被破坏或插槽与发送方的信号断开连接,则此函数返回的指针将变为无效。

警告:此功能违反了模块化的面向对象原则。但是,当多个信号连接到单个插槽时,访问发送者可能很有用。

警告:如上所述,当从与该对象的线程不同的线程通过Qt :: DirectConnection调用插槽时,此函数的返回值无效。请勿在这种情况下使用此功能。

原文地址:https://www.cnblogs.com/malinzhai/p/12634763.html