2014-01-08 2 views
3

QStackedWidget 항목을 KeyPressEvent을 사용하여 탐색하려고합니다. 그러나 그것을 할 수 없습니다. keyPressEvent에 어떤 신호 기능을 사용해야합니까?QStackedWidget에서 키보드를 통해 이동하십시오.

내 코드 : 당신은 현재의 인덱스를 취득하고 수동으로가 증가하고 그것을 설정해야

mywindow::mywindow() : QMainWindow() 

{ 

    stack = new QStackedWidget(); 
    list1 = new QListWidget(); 
    list2 = new QListWidget(); 
    list3 = new QListWidget(); 

    list1->addItem("Item 1"); 
    list1->addItem("Item 2"); 

    list2->addItem("Item 3"); 
    list2->addItem("Item 4"); 

    list3->addItem("Item 5"); 
    list3->addItem("Item 6"); 

    stack->addWidget(list1); 
    stack->addWidget(list2); 
    stack->addWidget(list3); 

    setCentralWidget(stack); 
} 

void mywindow::keyPressEvent(QKeyEvent *event) 

{ 

    switch(event->key()) 
    { 
     case Qt::Key_Left: 
      connect(stack,SIGNAL(KeyPressEvent(QKeyEvent *event)),stack,SLOT(setCurrentIndex(int))); 
      break; 
    case Qt::Key_Right: 
     connect(stack,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int))); 
     break; 
    } 
} 

답변

1

. 클래스에 대한 "다음"메소드는 없습니다. 그래서, 당신은 이런 식으로 뭔가를 쓰는 것입니다 : 그 QStackedWidget 구현을 바탕으로

void mywindow::keyPressEvent(QKeyEvent *event) 

{ 

    switch(event->key()) 
    { 
     case Qt::Key_Left: 
      stack->setCurrentIndex(stack->currentIndex() - 1); // <--- Added 
      break; 
    case Qt::Key_Right: 
      stack->setCurrentIndex(stack->currentIndex() + 1); // <--- Added 
     break; 
    } 
} 

, 당신은 그래서 인식하에 처리하고 있지만 인덱스 자신을 오버 플로우해야 할 수도 있습니다.

+0

'((mywindow *) this) -> mywindow :: stack'의 멤버 'setCurrentIndex'에 대한 요청입니다. 클래스가 아닌 'QStackedWidget * – Rupesh

+1

@ user3153003 : 사용자가 사용했기 때문에 '.' 포인터가 있어야하므로 '->'대신 멤버에 액세스하기위한 것입니다. – lpapp

+0

네, 알았어요. 감사 – Rupesh

관련 문제