다음과 같은 요구사항이 있을 경우 상당히 구현하기 까다롭다


requirement : 

YYYY MM DD 로 제한없는 입력보다는 제한된 리스트를 제공하여 콤보박스 형태로 보여줌

단, 직접 입력도 가능하도록 처리

년: 1900~2018 까지 제공
월: 01~12 까지 제공
일: 01~31 까지 제공


이 때 쓸만한 것이 QCompleter


example

QLineEdit으로 text 입력을 받고 여기에 QCompleter를 붙이는 형태이다.

이 때 중요한 것은 model을 설정하는 것. 

1. 파일에서 모델을 읽어오기도 하고 

> 예제  completer->setModel(modelFromFile(":/resources/wordlist.txt")) :: (링크)

2. sql model을 설정하고 특정 컬럼의 데이터만 대상만 보이게 할수도 있다.

> 예제

QSqlQueryModel sample;

completer->setModel(sqmple);

completer->setCompletionColumn(specific column name);

completer->setCompletionMode(QCompleter::PopupCompletion);

3. 하기와 같이 간단하게 string model을 만들수도 있다.


QStringList stringList;

for (int i = 1; i <= selecteddate.daysInMonth(); i++)

{

stringList << QString().sprintf("%02d", i);

}

QStringListModel *dateModel = new QStringListModel(stringList);

QCompleter* dateCompleter = new QCompleter;

dateCompleter->setModel(dateModel);


dateEdit->setCompleter(dateCompleter); //dateEdit은 QLineEdit

by 무위자연 2018. 2. 22. 16:28
| 1 |