不能在signal / slot / connect例程中传递参数

时间:2015-10-24 23:04:01

标签: c++ qt signals connect slot

我想做一些非常简单的事情。单击切换按钮并在QT中获得一个消息框。

CPP:

_show_hide_password = new QPushButton( "abc" );
_show_hide_password->setCheckable( true );
...
QMessageBox* show_password_warning = new QMessageBox ( this );
...
connect( _show_hide_password, SIGNAL ( toggled( bool ) ), this, SLOT ( showHidePw_ButtonAction( QMessageBox* show_password_warning ) ) );


void showHidePw_ButtonAction( QMessageBox* dialog ){...}

H:

public slots:
  void showHidePw_ButtonAction( QMessageBox* dialog);

无论我如何在连接或.h中格式化SLOT,我都无法解析插槽的参数。这很烦人。但是,当我根本没有将参数传递给插槽时,它可以工作:

CPP:

connect( _show_hide_password, SIGNAL ( toggled( bool ) ), this, SLOT ( showHidePw_ButtonAction() ) );

H:

public slots:
  void showHidePw_ButtonAction( );

但我不允许在.h-data中保留QMessageBox * show_password_warning全局。

如何传递信号中声明的函数的参数?

我认为这是一个非常简单的用例。应该有一个漂亮而干净的解决方案,不需要一些过顶的代码信号转换功能。

编译时没有问题,但是在启动程序后出现以下错误:

QObject::connect: No such slot PinEntryDialog::showHidePw_ButtonAction( QMessageBox* show_password_warning ) in pinentrydialog.cpp:198

1 个答案:

答案 0 :(得分:1)

插槽应具有的唯一参数与信号的参数相同。

您有两种选择,两者都相当简单:

  1. 使show_password_warning成为您班级的成员变量
  2. show_password_warning方法中创建showHidePw_ButtonAction(),并在完成后将其删除。