2010-11-18 18 views
2

Ich habe einen ToolButton mit meinem Qt-Designer erstellt und ich versuche, es mit einem Steckplatz zu verbinden. Ich schrieb diesesSignale und Slots mit Qtoolbutton

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

Im fähig, das Programm auszuführen, aber wenn ich die Taste drücken, sehe ich das folgende Protokoll in meine qt Anwendung Ausgabe:

Object::connect: No such signal QToolButton::triggered() in ../RightDoneIt/rightdoneit.cpp:10 
    Object::connect: (sender name: 'toolButton_addfiles') 
    Object::connect: (receiver name: 'RightDoneIt') 
  • Wenn ich die toolButton_addfile einige ändern Aktion wie (actionChange_addfile) wird es gut funktionieren.

Wie kann ich diese Verbindung funktionieren lassen?

Antwort

4

Wie der Fehler sagt, gibt es kein Signal triggered() sondern triggered(QAction*) in der QToolButton.

bearbeiten In der connect Funktion können Sie die Signalsignatur wie triggered(QAction*) haben muss, da QToolButton Klasse kein Signal triggered() (ohne Parameter)

erklärt hat entfernen, wie in den Kommentaren erklären: Wenn Sie machen wollen Um diese Verbindung herzustellen, müssen Sie einen Slot bereitstellen, der einen QAction-Zeiger als Parameter verwendet. Wenn dies nicht möglich ist, können Sie es mit dem Signal clicked versuchen.

+1

Nein, der Steckplatz muss keine QAction * ausführen. Es kann auch keine Argumente annehmen. Wenn ein Slot weniger Argumente als das Signal hat, werden die nachfolgenden Argumente einfach verworfen. –

+0

Sie haben Recht, ich werde ein wenig ändern meine Antwort –

+0

ausgelöste (QAction *) hat auch nicht funktioniert. Ich habe das mit dem clicked() Signal behoben. Vielen Dank allen! – Sharethefun

0

Ich schätze, Sie erstellen eine QAction, fügen sie dem QToolButton hinzu und versuchen, sie mit einem Slot in Ihrer eigenen Klasse zu verbinden?

Sie können Ihren Steckplatz entweder mit dem Signal QToolButton :: triggered (QAction *) oder direkt mit dem Signal QAction :: triggered() verbinden. In jedem Fall muss die QAction über QWidget :: addAction (QAction *) zum QToolButton hinzugefügt werden, die Methodensignatur des Slots muss der Signatur des Signals entsprechen und der Verbindungsaufruf muss die Signal/Slot-Parameter und nicht nur die Namen des Signals enthalten und Schlitz.

2

Sie könnten den automatischen Verbindungsprozess von Qt verwenden.

In der Klasse verweisen UI, erstellen Sie einen Schlitz genannt:

on_toolButton_addfiles_clicked();

Exemple:

See: 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(); 
}; 

hoffe, das hilft!

Bearbeiten: Nein ausgelöst Signale in qAbstractButton. Siehe http://doc.qt.nokia.com/4.7/qabstractbutton.html

Verwandte Themen