Скрыть или показать элементы QStackedWidget в Qt

Я хочу показать или скрыть элементы в QStackedWidget, Когда я нажимаю кнопку «Ввод», она должна показывать сложенный элемент, а когда я нажимаю левую кнопку, она должна скрываться.
я использую QStackedWidget а также QListWidget, Мой код:

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

2

Решение

Вам нужно будет обработать случаи 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

}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]