私の英語を残念に思う。テキスト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からスマートポインタを使用することはできません。私は何をしますか?
は、あなたがそれらのオブジェクトを交換する必要がありますか?おそらくそうではありません。 – LogicStuff
新しいラベルは一度しか作成せず、親の 'QWidget'へのポインタをそのコンストラクタに渡すべきです。この方法では、親が破棄されたときに自動的にクリーンアップされます。次に 'setTextToHint'関数で、既存のラベルテキストを' m_label-> setText(QString :: fromUtf8(str.c_str())) 'で更新することができます。 – Unimportant
あなたの質問はhttp://stackoverflow.com/questions/3264420/lifetime-of-qt-objectsの複製になりました – tinkertime