2017-01-08 26 views
1

私の英語を残念に思う。テキストqlabelを動的に変更する必要があります。動的にテキストを変更するqlabel

setTextToHint("One"); 
setTextToHint("First"); 

しかし、私は理解し、最終的label = "One"

OK:

class Game: 
{ 
... 
    std::shared_ptr<QWidget> m_hint; 
    QLabel *m_label; 
    QHBoxLayout *m_layout; 
} 

void Game::setTextToHint(std::string str) 
{ 
    m_label = new QLabel(); 
    m_layout = new QHBoxLayout(); 
    m_label->setText(QString::fromUtf8(str.c_str())); 
    m_layout->addWidget(m_label); 
    m_hint->setLayout(m_layout); 
} 

は、私は二回、この関数などを使用しています。私はちょうどクラスのコンストラクタで苦しんだ。

m_label = new QLabel(); 
m_layout = new QHBoxLayout(); 

しかし、問題は、実際には次のとおりです。

それでも私はしません。このQTオブジェクト良いSTLスマートポインタを使用するようにお願いしたいと思います。私はライブラリQTのみSTLからスマートポインタを使用することはできません。私は何をしますか?

+0

は、あなたがそれらのオブジェクトを交換する必要がありますか?おそらくそうではありません。 – LogicStuff

+2

新しいラベルは一度しか作成せず、親の 'QWidget'へのポインタをそのコンストラクタに渡すべきです。この方法では、親が破棄されたときに自動的にクリーンアップされます。次に 'setTextToHint'関数で、既存のラベルテキストを' m_label-> setText(QString :: fromUtf8(str.c_str())) 'で更新することができます。 – Unimportant

+2

あなたの質問はhttp://stackoverflow.com/questions/3264420/lifetime-of-qt-objectsの複製になりました – tinkertime

答えて

1

setTextToHintに電話するのはsetText()である必要があります。他のものはGameの構築時に行う必要があります。

stlスマートポインタの使用についてのあなたのご意見によると、newの使用ごとにメモリリークが心配されていると思います。 Qtは適切な親子設定を使用しているので、自分自身のメモリ管理を提供しているので、Qtオブジェクトの割り当てをstlスマートポインタ(一般的に)に混ぜる必要はありません。このトピックに関する

さらに多くの会話はここで見つけることができます: stackoverflow.com/questions/3264420/lifetime-of-qt-objects

関連する問題