2014-01-08 22 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

您將需要獲得當前索引,然後手動增加了出來,然後將其設置。這個類沒有「下一個」方法。所以,你會寫這樣的事:

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; 
    } 
} 

基礎上QStackedWidget實現,您可能需要在處理和溢出自己的指標了,所以要注意這一點。

+0

它拋出一個錯誤,因爲:'((mywindow *)this) - > mywindow :: stack'中的成員'setCurrentIndex'的請求,它是非類類型'QStackedWidget * – Rupesh

+1

@ user3153003:因爲您使用過''用於訪問成員而不是' - >',因爲它應該是指針。 – lpapp

+0

是的,我明白了。謝謝 – Rupesh