не может передавать аргументы в подпрограмме сигнала/слота/соединения

Я хочу сделать что-то довольно простое. Нажмите кнопку-переключатель и получите окно сообщения в QT.

цена за тысячу показов:

_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, я не могу разобрать аргумент в слот. Это довольно раздражает. Однако это работает, когда я вообще не передаю аргументы в слот:

цена за тысячу показов:

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

person Rhiji    schedule 24.10.2015    source источник


Ответы (1)


Единственными параметрами, которые должен иметь слот, являются те же параметры, что и у сигнала.

У вас есть два варианта, оба из которых довольно просты:

  1. Сделайте show_password_warning переменной-членом вашего класса
  2. Создайте show_password_warning внутри метода showHidePw_ButtonAction() и удалите его, когда закончите с ним.
person MrEricSir    schedule 24.10.2015