动态更改文本 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-&gt;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的主要内容,如果未能解决你的问题,请参考以下文章

在 Qt 上使用看门狗更改 QLabel 文本

不能在一个槽中两次更改 QLabel 文本

Python PyQt5:如果 QLineEdit 为空,如何更改 QLabel 的颜色?

如何使用 setStyleSheet 更改 QLabel 小部件的字体大小(百分比)? [复制]

更改 QLabel 的形状

从其他 python 脚本更改 PyQt 的 QLabel