无法在信号/槽/连接例程中传递参数

问题描述 投票:0回答:1

我想做一些非常简单的事情。单击切换按钮并在 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);

无论我如何格式化 connect 或 .h 中的 SLOT,我都无法解析该槽的参数。这很烦人。但是,当我根本不向插槽传递参数时,它会起作用:

cpp:

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

h:

public slots:
  void showHidePw_ButtonAction( );

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

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

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

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

QObject::connect: No such slot PinEntryDialog::showHidePw_ButtonAction( QMessageBox* show_password_warning ) in pinentrydialog.cpp:198
c++ qt signals slot
1个回答
1
投票

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

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

  1. 使
    show_password_warning
    成为你的类的成员变量
  2. show_password_warning
    方法中创建
    showHidePw_ButtonAction()
    并在完成后将其删除。
© www.soinside.com 2019 - 2024. All rights reserved.