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官方说明:
翻译如下:
如果在信号激活的插槽中调用,则返回指向发送信号的对象的指针;否则返回nullptr。指针仅在从对象的线程上下文调用此函数的插槽执行期间有效。
如果发送方被破坏或插槽与发送方的信号断开连接,则此函数返回的指针将变为无效。
警告:此功能违反了模块化的面向对象原则。但是,当多个信号连接到单个插槽时,访问发送者可能很有用。
警告:如上所述,当从与该对象的线程不同的线程通过Qt :: DirectConnection调用插槽时,此函数的返回值无效。请勿在这种情况下使用此功能。