2013-06-13 2 views
4

Qt GraphicsView와 관련된 작업이 정말 어려워졌습니다. 어떤 도움이나 제안도 높이 평가 될 것입니다. 내 QGraphicsView 응용 프로그램에서 편집 가능한 QGraphicsTextItems가 장면에 추가되었습니다. 다음과 같은 기능이 필요합니다 :Qt 편집 가능한 QGraphicsTextItem 변경시 텍스트 유효성 검사 및 신호 방출

  • 실수로 사용자가 실수로 해당 텍스트 항목의 문자 나 줄을 입력하지 않도록 float에 대한 유효성 검사기를 설정합니다.
  • 사용자가 텍스트를 변경하면 신호를 내 보냅니다.

아무도 내 응용 프로그램에서 이것을 구현할 수있는 방법을 제안 할 수 있습니까? 나는 열심히 노력했지만 좋은 것을 찾을 수는 없습니다. 다른 대안이나 해결 방법이 있으면 알려 주시면 감사하겠습니다.

감사합니다.

답변

6

QGraphicsTextItem은이 기능을 지원하지 않습니다. 귀하가 발견 하셨을 것입니다.

  1. 구현할 focusOutEvent(QFocusEvent* event) 및/또는 keyReleaseEvent(QKeyEvent* event) 당신이 검사기를 실행해야 할 때 감지하는 : 그래서 당신은 몇 가지 옵션이 있습니다. QValidator은 텍스트 클래스의 멤버로 만들 수 있으며 포커스가 손실되거나 키를 누를 때 쿼리 할 수 ​​있습니다 (완료를 나타내는 Enter 키 또는 모든 문자). 그런 다음 편집이 완료되거나 변경된 것으로 판단되면 사용자 정의 신호를 작성하십시오.
  2. GraphicsProxyWidget을 사용하여 텍스트 입력에 '실제'QLineEdit을 입력하고 기존 GUI 양식을 사용하는 것처럼 유효성 검사기를 설정하십시오. editingFinished() 또는 textEdited(const QString& text) 신호를 QLineEdit에서 QGraphicsTextItem으로 '전달'해야 위젯에 대한 외부 액세스를 제공 할 필요가 없습니다.
  3. QGraphicsTextItem의 내부 QTextDocument을 사용할 수도 있습니다. 이것은 실제로 보유하고있는 텍스트이며 (document()으로 액세스하십시오) 텍스트 형식입니다. 그러나 QValidator을 지원하지 않으므로 텍스트가 변경된 경우 (contentsChanged()으로 표시됨) QGraphicsTextItem에 의해 수신되고 유효성이 검사 된 다음 유효성 검사에 실패하면 업데이트되거나 삭제 된 신호 슬롯 루프를 만들어야합니다. (QTextDocument을 업데이트하고이 프로세스를 다시 트리거합니다). 통과하면 무시됩니다.

구현하기도 어렵습니다. 첫 번째 코드는 더 많은 코드가 필요하지만 텍스트 상자의 시각적 모양을보다 잘 제어 할 수 있습니다.

+0

[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

+0

@thuga 좋은 생각은 분명히 다른 접근 방식보다 복잡하지 않습니다. 내가 안으로 편집했습니다. – cmannett85

+0

고마워요! 정말 도움이되는 제안 –