2016-08-09 19 views
-5

別の関数でQLabelクラスのオブジェクトを呼び出したいとします。私はこれが基本的なC++だが、Qtでは混乱していることを知っている。私は関数に別の関数で作成されたオブジェクトを呼び出す方法

void createlbl(){ 

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

} 

void Mainwindow :: resizeEvent(QResizeEvent *evt){ 


} 

を作成している私のmainwindow.cppで

私はそれのサイズを変更するresizeEvent機能にラベルオブジェクト(LBL1)を呼び出す必要があります。 また、私のプログラムの他の関数でオブジェクトを呼び出す必要があります。 私はさまざまな方法を試みましたが、私はそれを呼び出してさまざまな機能を使用する正しい方法を得ていません。 私はどのようなパラメータを渡す必要があります、どのように私はクラスまたは関数が異なる関数で使用するために作成された関数を呼び出す必要があります教えてください。

は、このチュートリアル Class Tutorialをチェックし、これが基本的なC++であなた

+4

これは基本的なC++であり、Qtとは関係ありません。 – juanchopanza

+1

[メンバー変数](https://en.wikipedia.org/wiki/Member_variable)。 – thuga

+0

ヘッダーで彼を宣言し、目に見えるようにして、コンストラクターで彼を誘発し、あなたのイベントで彼を使用してください。 – Skywrath

答えて

1

ありがとうございます。

あなたが別のクラスにそれはづけし作成し、それを公共にしたい場合はゲッターを追加し、あなたのヘッダファイル内のプライベート変数として*あなたのQLabelを作成します。あなたのQLabelのinitあなたのcppファイルで

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

を*それを使用する前にcreatelbl()関数を呼び出すことで、nullポインタを避けるためにクラスコンストラクタで呼び出すことができます。今、ちょうどあなたのresizeEvent機能でそれを使用します。

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

私はQLabelはあなたのメインウィンドウのmemberであると仮定します。また、このように宣言する必要があります。

.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."); 
} 

、私は、可能な場合は、ポインタを避けるようにしてください。そのはるかに簡単で、メモリリークを避けることについて考える必要はありません。

+0

他のウィジェットのレイアウトにウィジェットを追加すると、そのウィジェットは子になり、qtはその削除を処理します。 –

+0

確かに、ポインタなしでもやり遂げることができます。私はちょうどそれが懐かしい使用ポインタに悪い習慣を引き起こす可能性があると思った。 – Drayke

関連する問題