Я пытаюсь ориентироваться QStackedWidget
Пункт с помощью KeyPressEvent
, Но я не могу этого сделать. Какую функцию сигнала мы должны использовать для keyPressEvent
?
Мой код:
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;
}
}
Вам нужно будет получить текущий индекс, а затем увеличить его вручную, а затем установить его. Для этого класса нет «следующего» метода. Итак, вы бы написали что-то вроде этого:
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, вам может потребоваться обработать и переполнить себя для индексов, так что имейте это в виду.
Других решений пока нет …