Установите Qt::StrongFocus.
окно активно, на нём кроме моего графика виджета нет- значит в фокусе
Ещё дополнение - окно с виджетом графика находится в MdiArea и почему-то при активном окне графика клавиши влево-вправо реагируют не на графике, а на области Mdi - заметно, когда окна больше области Mdi и клавишами влево-вправо идёт перемещение по скролу области
C++ (Qt)
if(e == PLOT2D)
{
graph = new Plotter();
graph->set_plot_settings(Settings2DGraph(QVector<Curve>()<<Curve(QVector<tabl>()<<tabl(1,2)<<tabl(4,sequenceNumber))));
graph->setFocus(Qt::FocusReason(Qt::StrongFocus));
box.addWidget(graph);
setLayout(&box);
}
if(e == PLOT3D)
{
graph3d = new Plot_surface(this);
graph3d->setAttribute(Qt::WA_OpaquePaintEvent);
//graph3d->loadFromData()
box.addWidget(graph3d);
//graph3d->show();
setLayout(&box);
}
просто идёт проверка при добавление виджета на окно, второй виджет - обрабатывает клавиатуру, а первый - не хочет, хотя всё там прописано
C++ (Qt)
void Plotter::keyPressEvent(QKeyEvent *event)
{
switch (event->key()) {
case Qt::Key_Left:
opt_graph.move_left_right_coordinates_x(1,1);
break;
case Qt::Key_Right:
opt_graph.move_left_right_coordinates_x(0,1);
break;
case Qt::Key_Down:
opt_graph.move_top_bottom_coordinates_y(0,1);
break;
case Qt::Key_Up:
opt_graph.move_top_bottom_coordinates_y(1,1);
break;
case Qt::Key_Minus:
if(event->modifiers()&Qt::ShiftModifier)
opt_graph.zoom_x(0,1);
else if(event->modifiers()&Qt::ControlModifier)
opt_graph.zoom_y(0,1);
else opt_graph.zoom_x_y(0,1);
break;
case Qt::Key_Plus:
if(event->modifiers()&Qt::ShiftModifier)
opt_graph.zoom_x(1,1);
else if(event->modifiers()&Qt::ControlModifier)
opt_graph.zoom_y(1,1);
else opt_graph.zoom_x_y(1,1);
break;
default:
QWidget::keyPressEvent(event);
}
}