2010-11-18 3 views
2

J'ai créé un ToolButton avec mon concepteur qt et Im essayant de le connecter à un slot. J'ai écrit ceSignaux et emplacements avec Qtoolbutton

connect(ui->toolButton_addfiles, SIGNAL(triggered()), this, SLOT(changeDirectory())); 

Im en mesure d'exécuter le programme, mais quand j'appuie sur le bouton, je vois le journal suivant dans mon qt Sortie d'application:

Object::connect: No such signal QToolButton::triggered() in ../RightDoneIt/rightdoneit.cpp:10 
    Object::connect: (sender name: 'toolButton_addfiles') 
    Object::connect: (receiver name: 'RightDoneIt') 
  • Si je change le toolButton_addfile à certains action comme (actionChange_addfile) cela fonctionnera bien.

Comment puis-je faire fonctionner cette connexion?

Répondre

4

Comme l'indique l'erreur, il n'y a pas de signal triggered() mais triggered(QAction*) dans le QToolButton.

Modifier Dans la fonction de connexion, vous devez avoir la signature du signal comme triggered(QAction*) depuis QToolButton classe n'a pas de signal triggered() (sans paramètre) a déclaré

Supprimer comme expliquer dans les commentaires: Si vous voulez faire cette connexion pour fonctionner vous devez fournir un emplacement qui prend un pointeur QAction en tant que paramètre. Si vous ne pouvez pas faire cela, vous pouvez essayer avec le signal clicked.

+1

Non, l'emplacement n'a pas besoin de prendre un QAction *. Il peut également ne prendre aucun argument du tout. Si un emplacement a moins d'arguments que le signal, les arguments de fin sont simplement rejetés. –

+0

Vous avez raison, je vais modifier un peu ma réponse –

+0

déclenché (QAction *) n'a pas fonctionné aussi bien. J'ai corrigé cela avec le signal clicked(). Merci beaucoup à tous! – Sharethefun

0

Je suppose que vous créez une QAction, l'ajoutant à QToolButton et essayant de la connecter à un slot de votre propre classe.

Vous pouvez connecter votre emplacement au signal QToolButton :: triggered (QAction *) ou directement au signal QAction :: triggered(). De toute façon, QAction doit être ajouté à QToolButton via QWidget :: addAction (QAction *), la signature de la méthode doit correspondre à la signature du signal, et l'invocation de connexion doit inclure les paramètres signal/slot, pas seulement les noms du signal et slot.

2

Vous pouvez utiliser le processus de connexion automatique de Qt.

Dans la classe le référencement de votre interface utilisateur, créez une fente appelée:

on_toolButton_addfiles_clicked();

Exemple:

Voir: A Dialog With Auto-Connect

class ImageDialog : public QDialog, private Ui::ImageDialog 
{ 
    Q_OBJECT 

public: 
    ImageDialog(QWidget *parent = 0); 

private slots: 
    void on_okButton_clicked(); 
}; 

Hope this helps!

Édition: No a déclenché des signaux dans qAbstractButton. Voir http://doc.qt.nokia.com/4.7/qabstractbutton.html

Questions connexes