일부 GUI 응용 프로그램에서는 QMainWindow를 다른 컨트롤 (QGraphicsScene + QGraphicsView, QPushButtons, QWidget)과 함께 사용합니다. 내부 QGraphicsScene이 다른 항목의 많은 입력 위치 : 다각형 항목이 항목은 그 플래그가,QGraphicsItem 및 탭 순서
QGraphicsPolygonItem
QGraphicsTextItem
QGraphicsRectItem
하지만 나를 위해 가장 중요하다 : 나는 마우스로 모든 항목을 선택할 수 있습니다
setFlag(QGraphicsItem::ItemIsFocusable, true);
setFlag(QGraphicsItem::ItemIsMovable, true);
setFlag(QGraphicsItem::ItemIsSelectable, true);
을하지만, Tab로 해당 항목의 포커스를 변경해야합니다. 어떻게 가능합니까?
SetTabOrder는 QGraphicsObjects에서만 작동합니다. 나는 ::를 QGraphicsView와 함께이 문제를 해결하기 위해 노력
bool MyGraphicsView::focusNextPrevChild(bool next)
{
QGraphicsPolygonItem *target;
QGraphicsPolygonItem *current;
if(scene()->focusItem())
{
target = qgraphicsitem_cast<QGraphicsPolygonItem*>(scene()->focusItem());
bool is_focus_next=false;
foreach(QGraphicsItem *item, scene()->items())
{
current = qgraphicsitem_cast<QGraphicsPolygonItem*>(item);
// set focus for next before selected
if(current && is_focus_next)
{
item->setFocus(Qt::MouseFocusReason);
// item->setSelected(true);
is_focus_next = false;
break;
}
// searching for selected item
if(current && current == target)
{
is_focus_next = true;
}
}
}
}
하지만 탭 다시를 QGraphicsView 제어 외부의 다른는 QWidget로 이동 한 포커스 버튼을 누르면에만 첫 번째 탭, 일을 재정의 focusNextPrevChild. QGraphicsItem의 탭 순서 포커스로 저를 도울 수 있습니까? 최종 버전, 스테 펜 덕분에 :
당신에게EDIT 감사드립니다.
bool MyGraphicsView::focusNextPrevChild(bool next)
{
QGraphicsPolygonItem *target;
QGraphicsPolygonItem *current;
if(scene()->focusItem())
{
target = qgraphicsitem_cast<QGraphicsPolygonItem*>(scene()->focusItem());
bool is_focus_next=false;
foreach(QGraphicsItem *item, scene()->items())
{
current = qgraphicsitem_cast<QGraphicsPolygonItem*>(item);
// set focus for next before selected
if(current && is_focus_next)
{
item->setFocus(Qt::MouseFocusReason);
return true;
}
// searching for selected item
if(current && current == target)
{
is_focus_next = true;
}
}
}
return QGraphicsView::focusNextPrevChild(next);
}
감사합니다.이 작은 실수 (true 또는 false 반환)는 큰 발자국입니다. – Dmitry