【问题标题】:cannot pass arguments in a signal/slot/connect routine无法在信号/插槽/连接例程中传递参数
【发布时间】:2015-10-25 07:11:50
【问题描述】:

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


    【解决方案1】:

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

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

    1. show_password_warning 设为类的成员变量
    2. showHidePw_ButtonAction() 方法中创建 show_password_warning 并在完成后将其删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      • 1970-01-01
      相关资源
      最近更新 更多