2017-07-14 5 views
0

J'ai un ButtonGroup défini avec deux boutons radiosignal de Qt sur ButtonGroup non connecté

buttonGroupFFTDimension = new QButtonGroup(this); 
buttonGroupFFTDimension->addButton(ui->radioButton1D, 1); 
buttonGroupFFTDimension->addButton(ui->radioButton2D, 2); 
buttonGroupFFTDimension->setExclusive(true); 
ui->radioButton1D->setChecked(true); 

La connexion compile également

connect(this->buttonGroupFFTDimension, static_cast<void(QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked), 
     this, &MainWindow::on_buttonGroupFFTDimension_buttonClicked); 

mais il jette et erreur lors de l'exécution

QMetaObject::connectSlotsByName: No matching signal for on_buttonGroupFFTDimension_buttonClicked(int) 

I admettre que je ne suis pas familier avec la nouvelle syntaxe de connexion, mais ne vois pas non plus l'erreur évidente. Qu'est-ce qui ne va pas?

+2

Vous pouvez montrer comment vous définissez l'emplacement: 'on_buttonGroupFFTDimension_buttonClicked' – eyllanesc

+2

Le message affiché est parce que vous utilisez' Qt Designer' et utilise la méthode 'connectSlotsByName' pour connecter différents éléments, il reconnaît le format' on_somesender_somesignal' , et dans votre cas correspond à votre emplacement, essayez de changer le nom de votre emplacement, lancez 'make clean' et ensuite' qmake'. – eyllanesc

Répondre

3

Le message affiché est dû au fait que vous utilisez Qt Designer et qu'il utilise la méthode connectSlotsByName pour connecter divers éléments, il reconnaît le format on_somesender_somesignal et, dans votre cas, correspond à votre emplacement.

  • Première solution: Il n'est pas nécessaire d'utiliser la fonction connect, cela le fera automatiquement. Aussi je pense que le slot n'a pas comme paramètre le type int qui l'exige.

Dans votre cas, la fente doit être comme suit:

private slots: 
    void on_buttonGroupFFTDimension_buttonClicked (int val); 
  • Une autre solution possible est de renommer l'emplacement, après que vous exécutez make clean et qmake.
+0

J'ai rebaptisé la fente et cela fonctionne maintenant. –