인프런 커뮤니티 질문&답변

김재우님의 프로필 이미지

작성한 질문수

[입문] Qt 6 프로그래밍 1편

Signal 과 Slot을 연결하는 예제 구현

클래스 이벤트 함수 사용법 문의

22.04.13 16:27 작성

·

313

1

강사님 Model/View 예제 이용해 사용방법 익히기 까지 수강하였습니다. 해당 강의에 올려주신 예제에서 우측의 TreeView에서 파일을 클릭(더블클릭)하면 파일명과 경로등을 일단 단순위 qDegug()룰 통해 출력할려고 합니다. 이때 connect 를 통해 slot함수와 이벤트 함수를 연결하려고 하는데. 트리뷰에서 파일을 더블클릭했을때의 멤버변수를 알아야 하는데 관련 클래스에서 어떠어떠한 이벤트 멥버함수가 있는지 어떻게 알 수 있을까요? 막상 하려니 막히네요 ^^ 제 생각에는 일단 connect를 통해 해당 아이템 더블클릭 이벤트를 발생시키고 이때 선택된 아이템의 파일명을 String으로 가져와 출력해주면 될것 같은데요... 도움부탁드립니다.

 

답변 1

0

김대진님의 프로필 이미지
김대진
지식공유자

2022. 04. 13. 17:26

안녕하세요. 김재우님 , 

QTreeView 에는 " doubleClicked(const QModelIndex &index) " 라는 Signal 이 있습니다. 이 시그널을 Slot 함수와 연결해주면, 클릭한 해당 디렉토리 또는 파일에 대한 정보를 얻어 올 수 있습니다. 

예를 들어 아래와 같이 사용할 수 있습니다.  

 

Widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QtWidgets>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

private:
    QFileSystemModel *m_model;

private slots:
    void on_treeView_doubleClicked(const QModelIndex& index);
};

#endif // WIDGET_H

 

Widget.cpp 

#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    setWindowTitle("Model/View - QTreeView and QListView");

    resize(600, 300);
    QSplitter *splitter = new QSplitter(this);

    // Model class
    m_model = new QFileSystemModel;
    m_model->setRootPath(QDir::currentPath());

    // View widget - QTreeView
    QTreeView *tree = new QTreeView(splitter);
    tree->setModel(m_model);
    tree->setRootIndex(m_model->index(QDir::currentPath()));

    QVBoxLayout *layout = new QVBoxLayout();
    layout->addWidget(tree);
    setLayout(layout);

    connect(tree, SIGNAL(doubleClicked(QModelIndex)),
            this, SLOT(on_treeView_doubleClicked(QModelIndex)));
}

void Widget::on_treeView_doubleClicked(const QModelIndex& index)
{
    qDebug() << m_model->filePath(index);
}

Widget::~Widget()
{

}
김재우님의 프로필 이미지
김재우
질문자

2022. 04. 13. 18:30

감사합니다. 

제가 해당함수를 찾아보려고 해도 찾을 수가 없었습니다. QTreeView F1을 눌러 도움말을 열었지만 찾을 수 없었어요.. 어디서 볼 수 있을까요?

김대진님의 프로필 이미지
김대진
지식공유자

2022. 04. 13. 18:55

Assistant 툴에서 보시면 찾을 수 있습니다. QTreeView 는 QAbstractItemView 클래스로부터 상속받는데, 이 클래스에 보면 확인 하실 수 있습니다. 

 

아래 그림에서 보는 것과 같이 빨간색으로 테두리 되어있는 링크를 클릭하시면 됩니다.

Assistant 가 Qt 버전마다 조금씩 형식이 다룰 수 있습니다. 따라서 inherited members 와 관련된 링크를 클릭하시면 됩니다. 

 

 

김재우님의 프로필 이미지
김재우
질문자

2022. 04. 13. 19:35

친절하고 빠른 설명 감사드립니다. 열심히 공부하겠습니다.