eventFilter 함수 내에서 treeView내의 index 얻는 문제 > QT 질문/답변

본문 바로가기
사이트 내 전체검색

QT 질문/답변

QT/Win32 eventFilter 함수 내에서 treeView내의 index 얻는 문제

페이지 정보

작성자 no_profile cbt0949 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글 9건 조회 1,275회 작성일 18-06-26 07:53

본문

안녕하세요 Qt 초보자입니다.
eventFilter 함수를 통해 treeView 파일 계층도 내에서 키보드(위 아래)를 눌러서 현재 index 값을 얻고자 하는데요, 문제는 eventFilter 함수내에서 키보드를 통해 새로 움직인 index가 eventFilter 함수가 다 끝난 다음 ( return QWidget::eventFilter(watched, event); 이 실행 된 후에 ) 반영 된다는 것입니다.
키보드를 눌렀을시 현재의 current index를 바로 eventFilter 함수내에서 처리 할 수 있는 방법이 있을까요?
아래 코드는 임시 방편으로라도 직접 키보드 위, 아래 키가 눌렸을때 index값을 직접 수동으로 -+1 해서 현재의 index 값을 얻고자 시도했던 코드인데요.. 잘 안되네요.

bool TipManager::eventFilter(QObject *watched, QEvent *event)
{
    if(watched == ui->treeView && event->type() == QEvent::KeyPress){
        QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);

        QModelIndex currentIndex = ui->treeView->currentIndex();

        if( keyEvent->key() == Qt::Key_Up )
        {
            //currentIndex = currentIndex.child(currentIndex.row()+1,currentIndex.column());
        }
        if( keyEvent->key() == Qt::Key_Down )
        {
            //currentIndex = currentIndex.child(currentIndex.row()-1,currentIndex.column());
        }
        if(currentIndex.isValid())
        {
            ui->treeView->setCurrentIndex(currentIndex);
            trimCurrentPath(currentIndex);
        }
    }
    return QWidget::eventFilter(watched, event);
}

추천0

댓글목록

devopia님의 댓글

no_profile devopia 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

eventFilter()를 사용하지 마시고 간단하게 다음과 같이 해 보세요.

connect(ui->treeView->selectionModel(), &QItemSelectionModel::currentChanged, [](const QModelIndex current, const QModelIndex &previous){
        qDebug() << current << previous;
});

cbt0949님의 댓글의 댓글

no_profile cbt0949 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

devopia님 답변 감사합니다.

connect를 생성자에 쓰면 되나요?

 warning: lambda expressions only available with -std=c++11 or -std=gnu++11 [enabled by default]
    });
    ^
썼더니 이런 오류가 나네요. 그리고 connect 함수는 파라미터가 4개 있어야 하지 않나요? 현재 3개인거 같아서요..

현재 treeView에서 index가 변경 되었을시 SLOT으로 실행 시켜줘야할 함수가 void indexChanged() 함수 인데요,

connect(ui->treeView->selectionModel(),&QItemSelectionModel::currentChanged,
            this, SLOT(indexChanged()));

이런식으로 설정해봤는데 안되네요.. 어느부분이 잘못된걸까요?

devopia님의 댓글의 댓글

no_profile devopia 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

람다식이 제공되지 않는 Qt 버전이나 컴파일러 버전 또는 환경 설정 부재로 인한 오류이며, 만약 C++11 규격을 사용할 수 없다면, Functor 방식 또는 매크로 방식으로 사용 가능합니다.

connect(ui->treeView->selectionModel(), &QItemSelectionModel::currentChanged, this, &TipManager::indexChanged);

또는

connect(ui->treeView->selectionModel(), SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(indexChanged(const QModelIndex &, const QModelIndex &)));

cbt0949님의 댓글의 댓글

no_profile cbt0949 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

첫번째 connect를 TipManager 생성자에서 써봤는데
다음과 같은 오류가 나네요.

QObject::connect: invalid null parameter

두번째 connect의 경우에는 indexChanged라는 함수가 제가 만든 함수가 파라미터를 가지고 있지 않아서 못써봤습니다만..
혹시 몰라서 indexChanged의 함수도 같이 보여드리겠습니다.

void TipManager::indexChanged()
{
    QModelIndex currentIndex = ui->treeView->currentIndex();
    ui->treeView->setCurrentIndex(currentIndex);
    trimCurrentPath(currentIndex);
}

보시면 아시겠지만 ui->treeView의 index가 변경될 시 indexChanged라는 함수를 실행시켜서 현재의 current directory path를 넘겨주게 하고 싶습니다.

devopia님의 댓글의 댓글

no_profile devopia 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

헤더에 해당 슬럿(indexChanged())이 다음과 같이 정의되어 있나요?

public slots:
    void indexChanged(const QModelIndex ¤t, const QModelIndex &previous);

그리고 이미 시그널에 현재 모델의 인덱스(current)가 넘겨 오니 별도로 ui->treeView->currentIndex() 함수를 쓸 필요는 없습니다.

cbt0949님의 댓글의 댓글

no_profile cbt0949 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

두번째 경우

.h 파일 내

public slots:
  void indexChanged(const QModelIndex ¤t, const QModelIndex &previous);

.cpp 파일 내

TipManager::TipManager(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::TipManager)
{
    ui->setupUi(this);

    connect(ui->treeView->selectionModel(),
            SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)),
            this, SLOT(indexChanged(const QModelIndex &, const QModelIndex &)));
  ...
}

void TipManager::indexChanged(const QModelIndex ¤t, const QModelIndex &previous)
{
    ui->treeView->setCurrentIndex(current);
    trimCurrentPath(current);
}

로 선언했더니

QObject::connect: Cannot connect (null)::currentChanged(const QModelIndex &, const QModelIndex &) to TipManager::indexChanged(const QModelIndex &, const QModelIndex &)

라는 메세지가 뜹니다.

cbt0949님의 댓글의 댓글

no_profile cbt0949 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

첫번째 경우

두번째 경우와 같고 생성자 부분만 다음과 같이 변경했더니
connect(ui->treeView->selectionModel(), &QItemSelectionModel::currentChanged, this, &TipManager::indexChanged);

다음과 같은 메세지가 뜹니다.

QObject::connect: invalid null parameter

devopia님의 댓글의 댓글

no_profile devopia 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

다른 이유는 없습니다. connect() 문 완성이 되지 않아서 입니다. 실행 가능한 전체 소스를 압축해서 답변에 첨부해 주세요. 제일 간단합니다. ^^
또한 현재 사용중인 OS/QT/Compiler 버전도 알려 주세요.

Total 7,052건 1 페이지
QT 질문/답변 목록
번호 제목 글쓴이 조회 추천 날짜
7052 QT/Embedded no_profile 고씨 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 17 0 02-20
7051 QT/Embedded no_profile tjdudejr 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 17 0 02-20
7050 QT/Embedded no_profile QT왕초보보보보보 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 47 0 02-15
7049 QT/Win32 no_profile 윤자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 47 0 02-14
7048 QT/X11 no_profile 빅토고 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 43 0 02-13
7047 QT/Win32 no_profile 동도리군 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 50 0 02-12
7046 QT/Embedded no_profile thisistophs 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 87 0 02-06
7045 QT/Win32 no_profile amond20 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 135 0 01-30
7044 QT/Embedded no_profile thisistophs 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 148 0 01-30
7043 QT/Embedded no_profile 둣바이홋 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 170 0 01-23
7042 QT/Embedded no_profile 은빛늑돌이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 202 0 01-21
7041 QT/Win32 no_profile devopia 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 153 0 01-23
7040 QT/Win32 no_profile 엔트로피 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 205 0 01-21
7039 QT/Embedded no_profile 원숭2 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 200 0 01-19
7038 QT/Win32 no_profile qtqt해 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 329 0 01-10
7037 QT/Win32 no_profile 원숭2 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 417 0 01-08
7036 QT/Embedded no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 311 0 01-07
7035 QT/X11 no_profile 토고찡 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 321 0 01-02
7034 QT/Win32 no_profile 원숭2 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 372 0 12-27
7033 QT/X11 no_profile 아아 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 417 0 12-24
7032 QT/Embedded no_profile 둣바이홋 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 294 0 12-20
7031 QT/Win32 no_profile 원숭2 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 363 0 12-20
7030 QT/Win32 no_profile sanomu 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 398 0 12-19
7029 QT/X11 no_profile 아아 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 311 0 12-19
7028 QT/Embedded no_profile 원숭2 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 396 0 12-17
7027 QT/Win32 no_profile qtqt해 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 410 0 12-12
7026 QT/X11 no_profile 하빈 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 391 0 12-07
7025 QT/X11 no_profile 장주영 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 405 0 12-07
7024 QT/Embedded no_profile 둣바이홋 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 575 0 11-29
7023 QT/Win32 no_profile 지루 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 430 0 11-29
게시물 검색

  • 게시물이 없습니다.

회원로그인

설문조사

새로운 홈페이지에 대한 평가

접속자집계

오늘
63
어제
497
최대
3,878
전체
4,081,903

Copyright © korone.net. All rights reserved.