2011-04-27 3 views
6

이것은 QT에 관한 첫 번째 질문입니다. 일반적으로 C# 프로그래머이므로 바보 같은 질문을 던져서 용서할 수 있습니다. 매우 간단한 대답이 있습니다. 그냥 찾을 수없는 것 같습니다. :QList4의 QT4 QstringListModel

목록에 항목을 추가하고 싶습니다. 즉, 그들이 문자열이라고 가정 해 봅시다. UI->listView하는 QStringList 및 QStringListModel :

stringList = new QStringList(); 
stringList->append("ABC"); 
stringList->append("123"); 

listModel = new QStringListModel(*stringList, NULL); 
ui->listView->setModel(listModel); 

stringList->append("xyz"); 

이 예제 컴파일 및 disaplys "ABC"내 목록에서 "123", 그러나 "XYZ" 은 내가 QListView 있습니다. 왜 안돼? listView를 다시 칠할 필요가 있습니까? NULL을 잘못 처리 했습니까?

감사합니다.

+0

참고 : 힙에 QStringLists를 만들 필요가 없습니다. 컨테이너는 암시 적으로 공유되며 일반적으로 value/const ref로 전달됩니다. –

+0

예. Qt에서는 계산상의 오버 헤드없이 값으로 may 인스턴스 (예 : QString, QList)를 전달할 수 있습니다. [여기보세요] (http://doc.qt.nokia.com/4.4/shared.html#implicit-sharing) –

답변

5

당신은 QStringList 수정 한, 당신은 모델을 수정해야합니다 자주 문자열 목록을 수정해야하고 업데이트해야 연결된 뷰가있는 경우

stringList->append("xyz"); 
listModel->setStringList(*stringList); 
23

, 당신은 멀리하고 고려할 수 먼저 QStringList를 사용하고 QStringListModel 만 사용합니다. insertRows/removeRows 및 setData를 사용하여 데이터를 추가/제거 할 수 있습니다. 이렇게하면보기가 항상 예상대로 모델을 반영합니다. 이것은 지루한 작업을 막기 위해 포장 될 수 있습니다. 뭔가 (테스트되지 않음) :

class StringList : public QStringListModel 
{ 
public: 
    void append (const QString& string){ 
    insertRows(rowCount(), 1); 
    setData(index(rowCount()-1), string); 
    } 
    StringList& operator<<(const QString& string){ 
    append(string); 
    return *this; 
    } 
};