QGraphicsTextItem
은이 기능을 지원하지 않습니다. 귀하가 발견 하셨을 것입니다.
- 구현할
focusOutEvent(QFocusEvent* event)
및/또는 keyReleaseEvent(QKeyEvent* event)
당신이 검사기를 실행해야 할 때 감지하는 : 그래서 당신은 몇 가지 옵션이 있습니다. QValidator
은 텍스트 클래스의 멤버로 만들 수 있으며 포커스가 손실되거나 키를 누를 때 쿼리 할 수 있습니다 (완료를 나타내는 Enter 키 또는 모든 문자). 그런 다음 편집이 완료되거나 변경된 것으로 판단되면 사용자 정의 신호를 작성하십시오.
GraphicsProxyWidget
을 사용하여 텍스트 입력에 '실제'QLineEdit
을 입력하고 기존 GUI 양식을 사용하는 것처럼 유효성 검사기를 설정하십시오. editingFinished()
또는 textEdited(const QString& text)
신호를 QLineEdit
에서 QGraphicsTextItem
으로 '전달'해야 위젯에 대한 외부 액세스를 제공 할 필요가 없습니다.
QGraphicsTextItem
의 내부 QTextDocument
을 사용할 수도 있습니다. 이것은 실제로 보유하고있는 텍스트이며 (document()
으로 액세스하십시오) 텍스트 형식입니다. 그러나 QValidator
을 지원하지 않으므로 텍스트가 변경된 경우 (contentsChanged()
으로 표시됨) QGraphicsTextItem
에 의해 수신되고 유효성이 검사 된 다음 유효성 검사에 실패하면 업데이트되거나 삭제 된 신호 슬롯 루프를 만들어야합니다. (QTextDocument
을 업데이트하고이 프로세스를 다시 트리거합니다). 통과하면 무시됩니다.
구현하기도 어렵습니다. 첫 번째 코드는 더 많은 코드가 필요하지만 텍스트 상자의 시각적 모양을보다 잘 제어 할 수 있습니다.
[QTextDocument :: contentsChanged()] (http://qt-project.org/doc/qt-5.0/qtgui/qtextdocument.html#contentsChanged) 신호가 작동 할 수 있습니까? [QGraphicsTextItem :: document()] (http://qt-project.org/doc/qt-5.0/qtwidgets/qgraphicstextitem.html#document)로 QTextDocument 객체를 얻을 수 있습니다. 나는 여기서 추측하고있다. – thuga
@thuga 좋은 생각은 분명히 다른 접근 방식보다 복잡하지 않습니다. 내가 안으로 편집했습니다. – cmannett85
고마워요! 정말 도움이되는 제안 –