Completer가 보이는 UI를 custom할 수 있다.

그래서 준비한 2탄

treeview도 가능하고

table view도 가능하다.

QStringListModel *dateModel = new QStringListModel(stringList);


#1 completer를 표시할 UI를 생성한다. 예제는 tableview

QTableView* tableView = new QTableView(dateModel);
patientViewModel->setParent(tableView);
tableView->horizontalHeader()->setVisible(false);
tableView->setShowGrid(false);

dateCompleter->setPopup(tableView);//


그리고 itemdelegate를 set해서 tableview를 더 풍성하게 보이고 싶다면...


#2 itemDelegate를 생성한다.

이 생성한 itemdelegate를 tableview에 넣어도 반영되지 않는다. 다음과 같이  completer의 popup에 바로 set해줘야 한다.!!!
dateCompleter->popup()->setItemDelegate(itemDelegate);


#3 model을 생성해서 임의로 만들고 싶다면?

QStandardItemModel *completerModel = new QStandardItemModel();

index = 0;

for (const auto& curRecord : records)
{
    QString name = list[index].name;
    QString genderString = list[index].gender
    QString birth = list[index].birth;
    completerModel->setItem(index, 0, new QStandardItem(name));
    completerModel->setItem(index, 1, new QStandardItem(genderString));
    completerModel->setItem(index, 2, new QStandardItem(birth));
    index++;
} 
return completerModel;
}


by 무위자연 2018. 12. 6. 17:33

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


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 |