-
카테고리
-
세부 분야
데스크톱 앱 개발
-
해결 여부
미해결
클래스 이벤트 함수 사용법 문의
22.04.13 16:27 작성 조회수 273
1
강사님 Model/View 예제 이용해 사용방법 익히기 까지 수강하였습니다. 해당 강의에 올려주신 예제에서 우측의 TreeView에서 파일을 클릭(더블클릭)하면 파일명과 경로등을 일단 단순위 qDegug()룰 통해 출력할려고 합니다. 이때 connect 를 통해 slot함수와 이벤트 함수를 연결하려고 하는데. 트리뷰에서 파일을 더블클릭했을때의 멤버변수를 알아야 하는데 관련 클래스에서 어떠어떠한 이벤트 멥버함수가 있는지 어떻게 알 수 있을까요? 막상 하려니 막히네요 ^^ 제 생각에는 일단 connect를 통해 해당 아이템 더블클릭 이벤트를 발생시키고 이때 선택된 아이템의 파일명을 String으로 가져와 출력해주면 될것 같은데요... 도움부탁드립니다.
답변을 작성해보세요.
0
김대진
지식공유자2022.04.13
안녕하세요. 김재우님 ,
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
감사합니다.
제가 해당함수를 찾아보려고 해도 찾을 수가 없었습니다. QTreeView F1을 눌러 도움말을 열었지만 찾을 수 없었어요.. 어디서 볼 수 있을까요?
김대진
지식공유자2022.04.13
Assistant 툴에서 보시면 찾을 수 있습니다. QTreeView 는 QAbstractItemView 클래스로부터 상속받는데, 이 클래스에 보면 확인 하실 수 있습니다.
아래 그림에서 보는 것과 같이 빨간색으로 테두리 되어있는 링크를 클릭하시면 됩니다.
Assistant 가 Qt 버전마다 조금씩 형식이 다룰 수 있습니다. 따라서 inherited members 와 관련된 링크를 클릭하시면 됩니다.
답변 1