강의

멘토링

로드맵

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

김재우님의 프로필 이미지
김재우

작성한 질문수

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

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

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

작성

·

434

1

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

 

퀴즈

Qt에서 Signal과 Slot의 주요 목적은 무엇일까요?

프로그램 실행 속도 최적화

객체 간 이벤트 기반 통신 구현

UI 디자인 자동 생성 기능

데이터베이스 연결 관리

답변 1

0

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

안녕하세요. 김재우님 , 

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()
{

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

감사합니다. 

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

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

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

 

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

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

 

 

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

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

김재우님의 프로필 이미지
김재우

작성한 질문수

질문하기