Qt 학습 튜 토리 얼 표 컨트롤 개미 선 상세 설명

개미 줄
상호작용 백과 에서 발췌:영상 영상 소프트웨어 에서 선택 한 지역 의 동적 점선 을 나타 낸다.점선 이 반 짝 이 는 모습 이 개미 떼 가 뛰 는 것 같 기 때문에 개미 선 이 라 고 부른다.Poshop,After Effect 등 소프트웨어 에서 흔히 볼 수 있다.
배경:엑셀 을 사용 한 친구 들 은 모두 알 고 있 습 니 다.셀 을 복사 할 때 셀 주위 에 뛰 어 다 니 는 사각형 상자 가 나타 납 니 다.이 사각형 상 자 는 개미 선 이 라 고 합 니 다.개미 선의 선형 을 설정 하고 컨트롤 의 효과 적 인 리 셋 횟수 를 조정 함으로써 우 리 는 서로 다른 움직임 효 과 를 얻 을 수 있 는데 이것 은 매우 재 미 있 는 현상 이다.
본 고 는 Qt 표 컨트롤 개미 선 에 관 한 내용 을 상세 하 게 소개 하고 참고 학습 을 제공 할 것 입 니 다.다음은 더 이상 할 말 이 없 으 니 상세 한 소 개 를 해 보 겠 습 니 다.
2.효과 전시
아래 그림 이 개미 선의 효과 캡 처 입 니 다.셀 을 누 르 면 픽 셀 너비 의 외곽 선 2 개 를 그립 니 다.한 칸 을 더 블 클릭 하면 개미 선 이 생 겨 개미 선의 선형 과 달리기 속 도 를 맞 출 수 있다.글 끝 에 프 리 젠 테 이 션 코드 다운로드 링크 를 보 여 줍 니 다.

실현
Qt 그림 그리 기 하면 paintEvent 함수 와 떨 어 질 수 없 을 것 이 고 대부분의 기능 은 paintEvent 함 수 를 다시 써 서 완성 할 수 있 습 니 다.모든 예외 가 있 습 니 다.컨트롤 자체 가 복잡 하거나 컨트롤 의 일부분 만 다시 써 야 할 때 다른 것 을 다시 써 서 수 요 를 완성 해 야 합 니 다.예 를 들 어 표 개미 선 그리 기 는 이 예외 에 속 합 니 다.우리 가 표를 다시 쓸 때 paintEvent 편지 수 를 다시 쓸 수 없습니다.이 함 수 를 다시 쓰 면 표 의 모든 것 을 우리 가 직접 그 려 야 합 니 다.좋 은 방법 은 QStyled ItemDelegate 프 록 시 종 류 를 다시 쓰 는 것 입 니 다.이 종 류 를 통 해 표 컨트롤 의 모든 항목 을 맞 출 수 있 습 니 다.다음은 리 셋 대리 류 의 실현 세부 사항 을 자세히 분석 하고 다음 네 가지 실현 차원 을 이해 한 후에 개미 선 은 기본적으로 완성 되 었 다.
1.영역 그리 기
개미 선 은 표 항목 을 대상 으로 그리 기 때문에 먼저 생각 나 는 것 은 표 의 한 항목 을 새로 고침 하여 그리 기 효율 을 높이 는 것 입 니 다.Qt 소스 코드 를 읽 고 QTableView 를 찾 습 니 다.:paintEvent 함수 에서 표 항목 을 그 렸 습 니 다.주로 QTableView Private:drawCell 함 수 를 호출 하여 각각 셀 을 그립 니 다.이 함수 의 마지막 줄 은 QStyled ItemDelegate 류 의 paint 방법 을 통 해 그립 니 다.3 절 1 절 설명 과 대응 합 니 다.이에 따라 국 지적 리 셋 을 하려 면 어 려 울 것 으로 보 여 결국 개미 선 리 셋 을 할 때마다 표 전 체 를 리 셋 하기 로 했다.
2.타이머
시간 에 맞 춰 새로 고침 하 는 것 은 말 그대로 타이머 가 필요 하 다 는 것 이다.시간 에 맞 춰 표 컨트롤 을 새로 고침 하 는 것 이다.먼저 생각 나 는 것 은 우리 스스로 QTimer 를 유지 하고 QTimer::timeout 신 호 를 통 해 표를 새로 고 치 는 것 입 니 다.그 밖 에 QObject 클래스 는 timerEvent 리 셋 함 수 를 제공 해 주 었 습 니 다.우 리 는 startTime 인 터 페 이 스 를 통 해 타 이 머 를 시작 하면 timerEvent 함수 가 정시 에 호출 됩 니 다.물론 이 리 셋 인 터 페 이 스 는 여러 개의 타 이 머 를 지원 합 니 다.timeID 로 모든 타 이 머 를 구분 합 니 다.
3.정책 그리 기
셀 을 선택 할 때(현재 셀 에서 변 화 를 발견)사각형 상 자 를 그립 니 다.사각형 상 자 를 그 리 는 것 이 비교적 간단 합 니 다.이것 은 첫 번 째 열 을 그 릴 때 사각형 상자 가 현재 항목 에서 도망 갈 수 있어 서 사각형 상자 가 불완전 하 게 표 시 될 수 있 습 니 다.개미 선 을 그 릴 때 도 이 문제 가 있 었 다.

void GMPFileItemDelegate::DrawBorderRect( QPainter * painter, const QRect & rect, bool firstColumn ) const
{
 painter->save();
 QPen pen = painter->pen();
 pen.setWidth(2);
 pen.setColor(QColor(0, 132, 255));
 painter->setPen(pen);
 
 QRect tmpRect = rect;
 if (firstColumn)
 {
 tmpRect.adjust(2, 1, -1, -1);
 }
 else
 {
 tmpRect.adjust(1, 1, -1, -1);
 }
 painter->drawRect(tmpRect);
 painter->restore();
}
셀 을 두 번 눌 렀 을 때 개미 선 을 그립 니 다.개미 선 은 타 이 머 를 통 해 선 틀 을 제어 하여 달 리 는 속 도 를 그립 니 다.이 주의 할 점 은 타이머 가 그 려 야 개미 선 이 앞으로 달 릴 수 있 습 니 다.
개미 선의 오프셋 에 따라 시작 되 는 공백 영역 을 그립 니 다.개미 선 은 7 개의 픽 셀 의 파란색 과 2 개의 픽 셀 의 공백 순환 으로 이 루어 져 있 으 며 10 개의 픽 셀 을 오프셋 할 때 1 개의 픽 셀 을 다시 오프셋 합 니 다.

if (startPoint != truthPoint && offset > 2)
{
 QPolygon polygon;
 for (int i = 4; i <= offset; ++i)//         
 {
 if (polygon.size() >= 7)
 {
  break;
 }
 polygon.append(truthPoint - QPoint(i , 0));
 }
 painter->drawPoints(polygon);
}
4.화면 새로 고침
qt 는 자신 만 의 인터페이스 리 셋 전략 을 가지 고 있 습 니 다.평소에 많이 사용 하 는 것 도 update(리 셋 권장),repaint(강제 리 셋)두 개의 인터페이스 밖 에 없습니다.그러나 이 두 인터페이스 가 호출 될 때 인터페이스 가 반드시 리 셋 되 는 것 은 아 닙 니 다.사실은 이 두 인 터 페 이 스 는 모두 QWidgetBackingStoreTracker 류 의 senUpdateRequest 인터페이스 류 를 사용 하여 던 진 리 셋 인터페이스 이벤트 입 니 다.Qt 창 은 dirty Widget 이라는 개념 이 있 습 니 다.이 창 을 새로 고침 이 필요 한 창 으로 판정 할 때 sendUpdateRequest 인 터 페 이 스 를 사용 하여 인터페이스 새로 고침 을 할 수 있 습 니 다.다음 코드 는 update 와 repaint 의 차이 점 은 switch 의 다른 가 지 를 호출 한 것 입 니 다.

void QWidgetBackingStore::sendUpdateRequest(QWidget *widget, UpdateTime updateTime)
{
 if (!widget)
 return;
 
 switch (updateTime) {
 case UpdateLater:
 updateRequestSent = true;
 QApplication::postEvent(widget, new QEvent(QEvent::UpdateRequest), Qt::LowEventPriority);
 break;
 case UpdateNow: {
 QEvent event(QEvent::UpdateRequest);
 QApplication::sendEvent(widget, &event);
 break;
 }
 }
}
표 컨트롤 에 대해 서 는 repaint 이나 update 함 수 를 단순히 호출 할 때 화면 을 새로 고 치 는 역할 을 하지 못 하기 때문에 화면 을 직접 새로 고 칠 수 있 는 다른 인 터 페 이 스 를 호출 해 야 합 니 다.현재 저 는 창 자체 style 을 직접 호출 하 는 polish 방법 을 생각 했 습 니 다.만약 에 큰 집에 서 다른 좋 은 새로 고 치 는 방식 이 있 으 면 메 시 지 를 남 길 수 있 습 니 다.
위의 4 개의 작은 설명 을 통 해 개미 선의 실현 은 기본적으로 완성 되 었 다.전체 소스 가 필요 합 니 다.csdn 에서 다운로드 하 세 요.
링크 다운로드
Qt 개미 선-표
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기