动态更改文本 qlabel
Posted
技术标签:
【中文标题】动态更改文本 qlabel【英文标题】:Dynamically change text qlabel 【发布时间】:2017-01-08 13:35:04 【问题描述】:对不起我的英语。我需要。
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 only STL 中的智能指针。我该怎么办?
【问题讨论】:
你需要替换那些对象吗?可能不会。 您应该只创建一次新标签,并将指向父级QWidget
的指针传递给它的构造函数。这样,当父级被销毁时会自动清理它。然后,在setTextToHint
函数中,您可以使用m_label->setText(QString::fromUtf8(str.c_str()))
更新现有的标签文本。
我认为你的问题已经演变成***.com/questions/3264420/lifetime-of-qt-objects的副本
【参考方案1】:
你应该让setTextToHint
只调用setText()
,其他一切都应该在Game
的构造上完成。
根据您对使用 stl 智能指针的评论,我认为您担心直接使用 new
会导致内存泄漏。事实上,您的使用大部分是正确的 - Qt 在使用正确的父子设置的同时提供自己的内存管理,因此没有理由将 Qt 对象分配与 stl 智能指针(通常)混合使用。
可以在此处找到有关此主题的更多对话: ***.com/questions/3264420/lifetime-of-qt-objects
【讨论】:
以上是关于动态更改文本 qlabel的主要内容,如果未能解决你的问题,请参考以下文章
Python PyQt5:如果 QLineEdit 为空,如何更改 QLabel 的颜色?