커뮤니티 | 큐티/임베디드/큐토피아 | PODO | SDL | 마이크로윈도우 | 리눅스프로그래밍 | 기타 | 포인트순위 | 최근게시물최근게시물 RSS  
korone.net에 다루었으면 하는것은요?
 
 
 
 
 
431
1,131
3,878
4,015,976
  현재접속자 : 86 (회원 0)






배너 신청 문의

 
작성일 : 18-06-26 07:53
[QT/Win32] eventFilter 함수 내에서 treeView내의 index 얻는 문제
 글쓴이 : cbt0949
조회 : 928   추천 : 0  
안녕하세요 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);
}



devopia 18-06-26 10:04
 
eventFilter()를 사용하지 마시고 간단하게 다음과 같이 해 보세요.

connect(ui->treeView->selectionModel(), &QItemSelectionModel::currentChanged, [](const QModelIndex current, const QModelIndex &previous){
        qDebug() << current << previous;
});
     
cbt0949 18-06-26 19:18
 
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 18-06-26 19:55
 
람다식이 제공되지 않는 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 18-06-26 20:15
 
첫번째 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 18-06-26 20:39
 
헤더에 해당 슬럿(indexChanged())이 다음과 같이 정의되어 있나요?

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

그리고 이미 시그널에 현재 모델의 인덱스(current)가 넘겨 오니 별도로 ui->treeView->currentIndex() 함수를 쓸 필요는 없습니다.
                         
cbt0949 18-06-26 23:06
 
두번째 경우

.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 18-06-26 23:09
 
첫번째 경우

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

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

QObject::connect: invalid null parameter
                         
devopia 18-06-27 09:56
 
다른 이유는 없습니다. connect() 문 완성이 되지 않아서 입니다. 실행 가능한 전체 소스를 압축해서 답변에 첨부해 주세요. 제일 간단합니다. ^^
또한 현재 사용중인 OS/QT/Compiler 버전도 알려 주세요.
                         
cbt0949 18-06-27 17:21
 
답변글에 올려드렸습니다!
현재 Qt 5.3 사용중입니다
 
 

Total 7,026
번호 제   목 글쓴이 날짜 조회 추천
7026 [QT/X11] 우분투에서 만든 프로그램에 한글 입력이 안… 하빈 12-07 43 0
7025 [QT/X11] Qt 한버튼으로 나누기 (1) 장주영 12-07 42 0
7024 [QT/Embedded] Qt 임베디드 플랫폼에서 돌아가도록 windows환… (4) 둣바이… 11-29 135 0
7023 [QT/Win32] 줄바꿈문자(\n) 가 출력됩니다. (2) 지루 11-29 97 0
7022 [QT/Embedded] 터치 스크린 지원 문제 (1) 정양섭 11-29 97 0
7021 [QT/Embedded] QT GUI Application 메뉴에 Combobox 올리는 방법 문… (6) 은빛늑… 11-27 131 0
7020 [QT/X11] Qt 5.6에서 잘 실행 되던게 Qt 5.11로 올렸더니 … (6) devilqoo 11-16 231 0
7019 [QT/Win32] qt 객체 공유 방법 질문합니다! (3) wjdtnwjdtn 11-14 222 0
7018 [QT/Win32] android 개발할때 언어 자바사용하나요? (1) 가나1 11-07 254 0
7017 [QT/Embedded] PYQT Raspberry pi 에서 이와 같은 디자인을 하려… 쿠쿠다… 11-01 222 0
7016 [QT/Win32] QML에서 텍스트가 너무 흐리게 표시되네요 (1) 민토고 10-25 374 0
7015 [QT/Embedded] binary file 수정하는 프로그램 작성 binary file수… (1) 정말모… 10-12 353 0
7014 [QT/Embedded] Qt 라이센스에 관련하여 문의드립니다. (3) 둣바이… 10-10 524 0
7013 [QT/X11] Qt 프로그램 초기 시작 위치를 설정할 수 있나… (3) 둣바이… 10-04 459 0
7012 [QT/Embedded] setStyleSheet CPU 점유율 누적 문제 (1) 뮤즈 09-17 582 0
7011 [QT/Embedded] Qt ui가 변경이 안됩니다. (1) rufks0435 09-14 599 0
7010 [QT/Win32] Qdialog show문제 (1) 삼패르 09-13 505 0
7009 [QT/Win32] QT 컴파일러 질문입니다. RoolRooRal 09-10 546 0
7008 [QT/Win32] Qdialog 프로세스 실행 중 화면에 UI 표시하고 … pyhef2 09-04 541 0
7007 [QT/Embedded] QTextEdit 을 이용한 setText 시, CPU 사용률 증가 … 둣바이… 09-03 625 0
7006 [QT/Win32] Qt로 히스토그램(도수분포형) 그래프를 그려… 2tachi 09-02 521 0
7005 [QT/Win32] qml 관련하여 질문드립니다. 배우러… 08-24 511 0
7004 [QT/Win32] Qwidget에 Qlabel을 추가하여 오버랩시켜 webcam을 … qweret123 08-23 550 0
7003 [QT/X11] 영상이 main 루프에서는 나오는데 thread 에서는… (1) 깨굴 08-17 640 0
7002 [QT/Embedded] QML 에서 shader effect 를 사용할 때... devilqoo 08-10 557 0
7001    [QT/Embedded] QML 에서 shader effect 를 사용할 때... devilqoo 08-24 526 0
7000 [QT/Win32] QT jpg파일을 움직이게 애니메이션효과를 주고… (1) 우준 07-26 843 0
6999 [QT/Embedded] [QT/QML]Image (png파일) 로드하기전 사이즈 체크… (1) 벨제붑 07-20 846 0
6998 [QT/Win32] qt html5 다국어 지원 오닝그 07-10 888 0
6997 [QT/X11] Qprocess로 스트림영상을 QFrame(혹은 다른)에 보… (4) 깨굴 07-05 1066 0
 1  2  3  4  5  6  7  8  9  10    


About korone.net | Copyright 2003 korone.net. All rights reserved.