영어로 죄송합니다. 동적으로 텍스트 qlabel을 변경해야합니다.동적으로 텍스트 변경 qlabel
setTextToHint("One");
setTextToHint("First");
하지만 난 이해 궁극적으로 label = "One"
확인 :
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