본문 바로가기

프로그래밍/시스템

C++ Qt TreeWidget

반응형

 

.행에는 여러 개의 데이터 열이 포함되며 각 열에는 텍스트 레이블과 아이콘이 포함될 수 있습니다.

관련문서: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