반응형
.행에는 여러 개의 데이터 열이 포함되며 각 열에는 텍스트 레이블과 아이콘이 포함될 수 있습니다.
관련문서:http://doc.qt.io/qt-5/search-results.html?q=treewidget
트리위젯을 사용하기 위해서는 다음과 같은 헤더파일이 필요합니다.
#include <qtreewidget.h>
● 트리위젯의 구성
① 기본 트리위젯 구성 예제
▷ 트리위젯의 헤더를 만들기 위한 코드는 다음과 같습니다.
1
2
3
4
5
|
QTreeWidgetItem* header = new QTreeWidgetItem;
header->setText(0, "User");
header->setText(1, "OS");
header->setText(2, "Version");
ui->treeWidget->setHeaderItem(header);
|
cs |
▷ 컬럼을 추가하는 함수입니다.
1
2
3
4
5
6
7
8
|
void MainWindow::Add_Toplevelitem(QString user_name , QString os_name , QString version)
{
QTreeWidgetItem* col = new QTreeWidgetItem(ui->treeWidget);
col->setText(0,user_name);
col->setText(1,os_name);
col->setText(2,version);
ui->treeWidget->addTopLevelItem(col);
}
|
cs |
▷ 해당 컬럼에 행을 추가하는 함수입니다.
1
2
3
4
5
6
|
void MainWindow::Add_Child(int column, QString text)
{
QTreeWidgetItem* child = new QTreeWidgetItem;
child->setText(0,text);
ui->treeWidget->topLevelItem(column)->addChild(child);
}
|
cs |
② 특정 아이템을 찾아서 삭제하기
1
2
3
4
5
6
7
|
QList<QTreeWidgetItem*> item = ui->treeWidget->findItems("1.4.5.13",Qt::MatchContains|Qt::MatchRecursive, 0);
for(int i = 0; i< item.count(); i++)
{
qDebug() << "delete" << item[i]->text(0);
delete item[i];
}
|
cs |
③ 트리위젯 복제
▷ 트리위젯을 트리위젯_2로 복제합니다. ※ treeWidget_2는 ui design에 이미 만들어져 있다고 가정합니다.
1
2
3
|
ui->treeWidget_2->setHeaderItem(ui->treeWidget->headerItem()->clone());
for(int i = 0; i< ui->treeWidget->topLevelItemCount(); i++)
ui->treeWidget_2->addTopLevelItem(ui->treeWidget->topLevelItem(i)->clone());
|
cs |
④ 다른 트리위젯간의 아이템 전송
▷ Right,Left 버튼 클릭을 위한 Slot을 생성합니다.
▷ 양방향으로 아이템을 전송할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
void MainWindow::on_Right_clicked()
{
int index = ui->treeWidget->indexOfTopLevelItem ( ui->treeWidget->currentItem());
if (index != -1) {
QTreeWidgetItem* item = ui->treeWidget->takeTopLevelItem(index);
ui->treeWidget_2->addTopLevelItem(item);
item->setSelected(true);
ui->treeWidget_2->setCurrentItem(item);
}
}
void MainWindow::on_Left_clicked()
{
int index = ui->treeWidget_2->indexOfTopLevelItem ( ui->treeWidget_2->currentItem());
if (index != -1) {
QTreeWidgetItem* item = ui->treeWidget_2->takeTopLevelItem(index);
ui->treeWidget->addTopLevelItem(item);
item->setSelected(true);
ui->treeWidget->setCurrentItem(item);
}
}
|
cs |
3,13번째 줄 코드는 현재 선택된(currentitem) 컬럼의 인덱스를 반환(indexofTopLevelItem)합니다.
▶ 결과
더보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
void MainWindow::Add_Toplevelitem(QString os_name , QString version , QString user_name)
{
QTreeWidgetItem* os = new QTreeWidgetItem(ui->treeWidget);
os->setText(0,os_name);
os->setText(1,version);
os->setText(2,user_name);
ui->treeWidget->addTopLevelItem(os);
}
// 헤더 추가
QTreeWidgetItem* header = new QTreeWidgetItem;
header->setText(0, "User");
header->setText(1, "OS");
header->setText(2, "Version");
ui->treeWidget->setHeaderItem(header);
// 컬럼추가
Add_Toplevelitem("my_user1","Window","10");
Add_Toplevelitem("my_user2","Linux","Core");
Add_Toplevelitem("my_user3","Window","7");
// 행추가
Add_Child(0,"1.4.5.12");
Add_Child(1,"3.12.5.6");
Add_Child(2,"2.1.5.6");
// 아이템을 찾는다.
QList<QTreeWidgetItem*> item = ui->treeWidget->findItems("1.4.5.13",Qt::MatchContains|Qt::MatchRecursive, 0);
// 찾은 개수 만큼 반복한다.
for(int i = 0; i< item.count(); i++)
{
qDebug() << "delete" << item[i]->text(0);
delete item[i];
}
// 트리위젯 정렬
ui->treeWidget->setSortingEnabled(true);
/* 가지고 있던 아이템을 다른 트리에 넘긴다.
int take_item_count = ui->treeWidget->topLevelItemCount();
for(int i = 0; i< take_item_count; i++)
ui->treeWidget_2->addTopLevelItem(ui->treeWidget->takeTopLevelItem(0));
*/
// 트리 복제
ui->treeWidget_2->setHeaderItem(ui->treeWidget->headerItem()->clone());
for(int i = 0; i< ui->treeWidget->topLevelItemCount(); i++)
ui->treeWidget_2->addTopLevelItem(ui->treeWidget->topLevelItem(i)->clone());
}
void MainWindow::Add_Toplevelitem(QString user_name , QString os_name , QString version)
{
QTreeWidgetItem* col = new QTreeWidgetItem(ui->treeWidget);
col->setText(0,user_name);
col->setText(1,os_name);
col->setText(2,version);
ui->treeWidget->addTopLevelItem(col);
}
void MainWindow::Add_Child(int column, QString text)
{
QTreeWidgetItem* os = new QTreeWidgetItem;
os->setText(0,text);
ui->treeWidget->topLevelItem(column)->addChild(os);
}
void MainWindow::on_Right_clicked()
{
int index = ui->treeWidget->indexOfTopLevelItem ( ui->treeWidget->currentItem());
if (index != -1) {
QTreeWidgetItem* item = ui->treeWidget->takeTopLevelItem(index);
ui->treeWidget_2->addTopLevelItem(item);
item->setSelected(true);
ui->treeWidget_2->setCurrentItem(item);
}
}
void MainWindow::on_Left_clicked()
{
int index = ui->treeWidget_2->indexOfTopLevelItem ( ui->treeWidget_2->currentItem());
if (index != -1) {
QTreeWidgetItem* item = ui->treeWidget_2->takeTopLevelItem(index);
ui->treeWidget->addTopLevelItem(item);
item->setSelected(true);
ui->treeWidget->setCurrentItem(item);
}
}
|
cs |
더보기
QTreeWidgetItem *item = new QTreeWidgetItem(ui->treeWidget->TopLevelItem(0)->
child(0));
QTreeWidgetItem * parent of item = item->parent() ---> TopLevelItem(0)
반응형
'프로그래밍 > 시스템' 카테고리의 다른 글
C++ Qt 정규식 (0) | 2018.03.15 |
---|---|
C++ Qt 파일 입출력 , 파일 변화 감지 (0) | 2018.03.12 |
C++ Qt 간단한 로그인 폼 만들기 (0) | 2018.03.12 |
jquery 강제 키 입력 트리거 (0) | 2017.12.19 |
MASM 프로그래밍 (0) | 2017.11.06 |