2017-12-28 2 views
0

나는 최근 QML로 시작했고 나는 this example을 따르려고했다. 비디오는 QML 응용 프로그램에 표시 될 수있는 C++ 모델을 만드는 방법을 설명합니다.왜 QStringLiteral을 사용합니까?

모델의 데이터 멤버 함수에서 스위치가 사용되며 QML에 표시 될 문자열이 QVariant에 반환되지만 자습서에서는 아래 코드에서 볼 수있는 것처럼 추가 QStringLiteral도 사용합니다.

QVariant ToDoModel::data(const QModelIndex &index, int role) const 
{ 
    if (!index.isValid()) 
    return QVariant(); 

    // FIXME: Implement me! 
    switch (role) 
    { 
    case DoneRole: 
    return QVariant(false); 
    case DescriptionRole: 
    return QVariant(QStringLiteral("Test description")); 
    } 
    return QVariant(); 
} 

은 내가 QStringLiteral없이 코드의이 같은 조각을 시도하고 잘, 그래서 QStringLiteral의 목적이 무엇 일?

+0

http://doc.qt.io/qt-5/qstring.html#QStringLiteral – arrowd

+2

이러한 유형의 질문에 대한 대답은 문서에 항상 : http://blog.qt.io/blog/2014/06/13/qt-weekly-13-qstringliteral / – eyllanesc

답변

1

QStringLiteral의 목적은 무엇입니까?

은 정적 및 동적으로 할당 된 문자열 모두를 조작 할 수있는 흥미로운 문자열 클래스입니다. 동적 할당은 코드 크기와 성능 측면에서 더 비싸지 만 더 유연하고 일반적으로 실용적입니다. Qt는 문자열을 정적으로 할당하고 QString 형식화 된 객체에 버퍼로 할당하는 매크로 QStringLiteral을 가지고 있습니다. 새 문자열이 할당 된 QString 개체에 기존 버퍼가 사용되지 않는 한.

#define QT_UNICODE_LITERAL(str) QT_UNICODE_LITERAL_II(str) 
#define QStringLiteral(str) \ 
    ([]() Q_DECL_NOEXCEPT -> QString { \ 
     enum { Size = sizeof(QT_UNICODE_LITERAL(str))/2 - 1 }; \ 
     static const QStaticStringData<Size> qstring_literal = { \ 
      Q_STATIC_STRING_DATA_HEADER_INITIALIZER(Size), \ 
      QT_UNICODE_LITERAL(str) }; \ 
     QStringDataPtr holder = { qstring_literal.data_ptr() }; \ 
     const QString qstring_literal_temp(holder); \ 
     return qstring_literal_temp; \ 
    }()) \ 
    /**/