2016-08-09 62 views
-5

Ich möchte ein Objekt der Klasse QLabel in einer anderen Funktion aufrufen. Ich weiß, dass das grundlegende C++ ist, aber es ist in Qt verwirrend.So rufen Sie ein Objekt auf, das in einer anderen Funktion erstellt wurde

in meinem mainwindow.cpp Ich habe eine Funktion

void createlbl(){ 

QLabel *lbl1 = new QLabel("Hello"); 

} 

void Mainwindow :: resizeEvent(QResizeEvent *evt){ 


} 
erstellt

ich brauche das Label-Objekt (LBL1) in der resizeEvent Funktion aufzurufen, um es zu ändern. Ich muss auch das Objekt in anderen Funktionen in meinem Programm aufrufen. Ich habe verschiedene Möglichkeiten ausprobiert, aber ich bekomme nicht den richtigen Weg, es zu nennen und in verschiedenen Funktionen zu verwenden. Bitte sagen Sie mir, welche Parameter ich weitergeben soll und wie ich die Klasse oder die Funktion, in der die Klasse erstellt wurde, in verschiedenen Funktionen verwenden soll.

Danke

+4

Dies ist grundlegende C++, und es hat nichts mit Qt zu tun. – juanchopanza

+1

[Mitgliedsvariablen] (https://en.wikipedia.org/wiki/Member_variable). – thuga

+0

Erklären Sie ihn im Header, um sichtbar zu sein, setzen Sie ihn im Konstruktor ein und verwenden Sie ihn in Ihrem Event. – Skywrath

Antwort

1

Dies ist eine grundlegende C++, lesen Sie in diesem Tutorial Class Tutorial.

Erstellen Sie Ihre QLabel * als private Variable in der Header-Datei, einen Getter hinzufügen, wenn Sie es zugänglich zu anderen Klassen machen wollen und es öffentlich machen:

public: 
    QLabel* label() const { return _label; } 
...  
private: 
    QLabel* _label; 

in Ihrer CPP-Datei init Ihre QLabel * Wenn Sie die Funktion createlbl() aufrufen, bevor Sie sie verwenden, können Sie sie in Ihrem Klassenkonstruktor aufrufen, um Nullzeiger zu vermeiden. Nun, verwenden Sie es nur in Ihrer resizeEvent Funktion:

void Mainwindow :: resizeEvent(QResizeEvent *evt){ 
    label()->setText("Hey, i'm here!"); 
} 
0

Ich gehe davon aus QLabel ein member Ihrem Hauptfenster ist. Sie sollten es auch so erklären.

.h:

class Mainwindow 
{ 
    public: 
    void resizeEvent(QResizeEvent *evt); //Q_DECL_OVERRIDE ? 
    private: 
    QLabel mLabel; //a member of MainWindow class, also no pointer 
} 


CPP

MainWindow::MainWindow(): 
    mLabel() 
{ 
    //mLabel will be available inside every function of "MainWindow" 
} 
MainWindow::resizeEvent(QResizeEvent *evt) 
{ 
    mLabel.setText("Done."); 
} 

Für mich, ich versuche Zeiger zu vermeiden, wenn möglich. Es ist viel einfacher und Sie müssen nicht darüber nachdenken, Speicherlecks zu vermeiden.

+0

Wenn Sie ein Widget zum Layout eines anderen Widgets hinzufügen, wird es zum Kind und qt kümmert sich um das Löschen. –

+0

Sicher, aber Sie können es auch ohne Zeiger tun. Ich dachte nur, dass es schlechte Angewohnheiten verursachen könnte, immer Hinweise zu benutzen. – Drayke