Я хочу переключиться с одного QToolButton
другому в QToolBar
, я использовал QStackedWidget
Их слишком просто сдвинуть с места widget
к другому, но здесь я не могу понять, как двигаться с помощью keyReleaseEvent
,
mywindow::mywindow() : QMainWindow()
{
widget = new QWidget();
setCentralWidget(widget);
tool = new QToolBar();
vertical = new QVBoxLayout();
button1 = new QToolButton();
connect( button1, SIGNAL(clicked()), this, SLOT(fileNew()) );
button2 = new QToolButton();
button3 = new QToolButton();
button1->setIcon(QIcon("download.jpg"));
button1->setGeometry(0,0,100,200);
button2->setIcon(QIcon("images.jpg"));
button3->setIcon(QIcon("settings-icon.jpg"));
//stack1->addWidget(button1);
//stack1->addWidget(button2);
//stack1->addWidget(button3);
tool->addWidget(button1);
tool->addWidget(button2);
tool->addWidget(button3);
//tool->addWidget(stack1);
vertical->addWidget(tool);
widget->setLayout(vertical);
}
void mywindow::keyReleaseEvent(KeyEvent *event)
{
switch(event->key())
{
case:Qt::Key_Left:}
}
Вы должны проверить против фокуса, и сдвиньте это соответственно. Я бы написал что-то вроде этого:
void mywindow::keyReleaseEvent(KeyEvent *event)
{
switch(event->key())
{
case:Qt::Key_Left:
if (button3->hasFocus())
button2->setFocus();
else if (button2->hasFocus())
button1->setFocus();
break;
case:Qt::Key_Right:
if (button1->hasFocus())
button2->setFocus();
else if (button2->hasFocus())
button3->setFocus();
break;
}
}
Обратите внимание, что этот код может легко стать утомительным, если вы продолжите добавлять дополнительные кнопки. Я бы положил их в контейнер. Затем я перебрал бы этот контейнер в прямом и обратном порядке в зависимости от логики переключения фокуса.
См. Документацию для получения дополнительной информации:
Это свойство содержит информацию о том, имеет ли этот виджет (или его прокси фокуса) фокус ввода с клавиатуры.
По умолчанию это свойство имеет значение false.
Примечание. Получение значения этого свойства для виджета фактически эквивалентно проверке, ссылается ли QApplication :: focusWidget () на виджет.
Функции доступа:
bool hasFocus () const
Других решений пока нет …