抱歉我的英文。我需要动态更改文本qlabel。
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);
}
我使用这个功能,例如两次:
setTextToHint("One");
setTextToHint("First");
但最终label = "One"
好的我明白了。我只是在类构造函数中受苦。
m_label = new QLabel();
m_layout = new QHBoxLayout();
但问题实际上是:
我仍然想要使用stl智能指针这个qt对象不好。我不能使用库QT中的智能指针STL。我该怎么办?
答案 0 :(得分:1)
您应该setTextToHint
只调用setText()
,其他所有内容都应该在构建Game
时完成。
根据你对使用stl智能指针的评论,我认为你担心直接使用new
的内存泄漏。实际上你的用法大多是正确的 - Qt在使用正确的父子设置时提供了它自己的内存管理,因此没有理由将Qt对象分配与stl智能指针混合(通常)。
可以在此处找到关于此主题的更多对话: stackoverflow.com/questions/3264420/lifetime-of-qt-objects