2014-01-08 2 views
2

QStackedWidget의 항목을 표시하거나 숨기려고합니다. Enter 버튼을 누르면 누적 된 요소가 나타나야하고, 누를 때 왼쪽 버튼이라고 표시되면 숨길 수 있습니다. 나는 QStackedWidgetQListWidget을 사용합니다. 내 코드 :QStackedWidget 숨기기 또는 표시

mymainwindow.h :

#ifndef MYMAINWINDOW_H 
#define MYMAINWINDOW_H 

class mymainwindow : public QMainWindow 
{ 
    Q_OBJECT 
public: 
    mymainwindow(); 

protected: 
    void keyPressEvent(QKeyEvent *event); 

private: 
    QStackedWidget *stack; 
    QListWidget *list; 
    QVBoxLayout *vertical; 
    QWidget *widget; 
}; 

#endif 

mymainwindow.cpp는 :

#include "mymainwindow.h" 

mymainwindow::mymainwindow() : QMainWindow() 
{ 
    stack = new QStackedWidget(); 
    list = new QListWidget(); 

    stack->addWidget(new QLineEdit("Hello U have clicked the first menu")); 
    stack->addWidget(new QLineEdit("Second ListWidget Item")); 
    stack->addWidget(new QLineEdit("Last Widget Item")); 

    widget = new QWidget(); 

    QLabel *label = new QLabel("Main Window"); 

    list->addItem("New Item 1"); 
    list->addItem("New Item 2"); 
    list->addItem("New Item 3"); 

    list->setFixedSize(200,100); 

    QVBoxLayout *vertical = new QVBoxLayout(); 
    vertical->addWidget(label); 
    vertical->addWidget(list); 
    vertical->addWidget(stack); 

    widget->setLayout(vertical); 
    setCentralWidget(widget); 
} 

void mymainwindow::keyPressEvent(QKeyEvent *event) 
{ 
    switch (event->key()) { 
    case Qt::Key_Down: 
     connect(list, SIGNAL(currentRowChanged(int)), stack, SLOT(setCurrentIndex(int))); 
     break; 
    case Qt::Key_Up: 
     connect(list, SIGNAL(currentRowChanged(int)), stack, SLOT(setCurrentIndex(int))); 
     break; 
    case Qt::Key_Left: 
     break; 
    } 
} 

답변

1

당신은 키를 눌러 이벤트 처리기에서 Key_Left 및 Key_Enter 경우를 처리해야합니다. 이 두 버튼을 눌러서 스택 위젯을 보이거나 숨기고 싶을 것 같습니다. 이는 간단한 QWidget 작업이며,이 문제는 QStackedWidget과별로 관련이 없습니다.

당신은 다음과 같이 키를 눌러 이벤트 코드를 변경해야합니다 :

void mymainwindow::keyPressEvent(QKeyEvent *event) 

{ 

    switch (event->key()) { 

    case Qt::Key_Down: 
     connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int))); 
     break; 
    case Qt::Key_Up: 
     connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int))); 
     break; 
     case Qt::Key_Left: 
      stack->show(); // <---- Added 

      break; 
    case Qt::Key_Enter: // <---- Added 
     stack->hide(); // <---- Added 
     break;   // <---- Added 

    } 
} 
+0

감사 형제 ..... 나를 위해 그 일 ...... – Rupesh

+0

user3153003 @ : 당신은 환영합니다. – lpapp

관련 문제