2017-01-08 3 views
1

영어로 죄송합니다. 동적으로 텍스트 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에서 스마트 포인터를 사용할 수 없습니다. 나는 무엇을해야합니까?

+0

는 당신이 그 객체를 교체해야합니까? 아마도 그렇지 않습니다. – LogicStuff

+2

새 레이블을 한 번만 만들고 부모 'QWidget'에 대한 포인터를 생성자에 전달해야합니다. 이렇게하면 부모가 삭제되면 자동으로 정리됩니다. 그런 다음'setTextToHint' 함수에서 기존 레이블 텍스트를'm_label-> setText (QString :: fromUtf8 (str.c_str()))'으로 갱신 할 수 있습니다. – Unimportant

+2

귀하의 질문은 http://stackoverflow.com/questions/3264420/lifetime-of-qt-objects의 중복으로 변경되었습니다. – tinkertime

답변

1

setTextToHintsetText()으로 전화해야하며 그 외 모든 것은 Game의 구성시 완료되어야합니다.

stl 스마트 포인터 사용에 관해서 귀하의 의견대로 new의 사용량에 따라 메모리 누수가 걱정됩니다. Qt는 적절한 부모 - 자식 설정을 사용하면서 자체 메모리 관리를 제공하므로 Qt 객체 할당을 stl 스마트 포인터 (일반적으로)와 혼합 할 필요가 없습니다. 이 주제에 대한

훨씬 더 대화는 여기에서 찾을 수 있습니다 : stackoverflow.com/questions/3264420/lifetime-of-qt-objects