2017-11-18 3 views
0

Ich habe diese Klasse in button.h:Connect-Slots von einer anderen Klasse arbeiten nicht in Qt

class Buttons : public QObject 
{ 
    Q_OBJECT 
public: 
    Buttons(); 
    QVector<QPushButton*> buttons; 
public slots: 
    void getBtnInfo(); 
}; 

und in mainwindow.cpp, schließe ich wie folgt aus:

Buttons mButtons; 
for(int i = 0; i < mButtons.buttons.size(); i++) { 
    mButtons.buttons[i] = new QPushButton(mCentralWidget); 
    ... 
    connect(mButtons.buttons[i], SIGNAL(clicked(bool)), &mButtons, SLOT(getBtnInfo())); 
} 

Es läuft ohne Fehler; aber die getBtnInfo() slot scheint nichts zu tun. Weil ich einfach nur versucht habe, in diesem Slot zu debuggen, funktioniert das nicht.

Aber wenn ich getBtnInfo() slot in mainwindow.h und schließen Sie wie folgt erklären:

connect(mButtons.buttons[i], SIGNAL(clicked(bool)), this, SLOT(getBtnInfo())); 

dann funktioniert es.
Ich frage mich warum? Und wie löse ich das obige Problem?
Danke.

Antwort

2

Wenn eine Variable in einer Funktion erstellt wird, existiert sie nur in dieser Funktion, dann ist sie nicht zugänglich, und das ist es, was ich denke, ich empfehle Ihnen, mButtons ein Mitglied der Klasse zu machen.

* .h

private: 
    Buttons mButtons; 
+0

Ich habe versucht, was Sie empfehlen, aber das Problem ist immer noch da. Ich denke nicht, dass das die Lösung ist. BTW, ich habe die Variable erstellt und verbinden die Signale und Slots in der gleichen Funktion. Kennen Sie einen anderen Weg, dieses Problem zu lösen? –

+0

@TheodoreTang Ich habe versucht, Ihr Projekt mit dem zu reproduzieren, was Sie mir und meinen Modifikationen zeigen, und es hat funktioniert, vielleicht habe ich andere Dinge angenommen, Sie könnten Ihr Projekt teilen, um es testen zu können. – eyllanesc

+0

Ich habe gefunden, nachdem ich mButtons zu meiner Klasse gemacht habe, habe ich vergessen, die Deklaration von mButtons in dieser Funktion zu entfernen. Ich habe es entfernt und es hat funktioniert. Vielen Dank –

Verwandte Themen