문제

저는 새로운 java/qt 프로그래머이고 java와 qt jambi를 사용하여 GUI를 구축하려고 합니다.

레이블 안에 픽스맵을 넣었더니 잘 작동하지만 이제 레이블 안의 픽스맵을 클릭하면 이미지 좌표를 가져와야 합니다.QWidget 좌표가 필요하지 않습니다.클릭한 지점의 이미지를 작업하려면 픽스맵 좌표가 필요합니다.

내 생각엔 내가 그 말을 무시해야 할 것 같아 마우스프레스이벤트 이벤트인데 "pixmap onclick"에 첨부하는 방법을 모르겠습니다.

쉬운 예를 들어주시겠어요?

제 문제를 올바른 방법으로 설명했으면 좋겠습니다. 제 영어 실력이 형편없어요. 죄송합니다!

도움이 되었습니까?

해결책

나는 mousePressEvent 이벤트를 재정의해야 한다고 생각하지만 "pixmap onclick"에 첨부하는 방법을 모르겠습니다.

이벤트와 신호를 혼동하시는 것 같습니다.전자는 QEvent이고 후자는 신호입니다.필요한 것은 전자이고 후자는 필요하지 않습니다.

C++를 작성할 때 QLabel 클래스를 서브클래싱하고 이와 같은 내용을 작성해야 합니다(Java의 Qt Jambi는 아니지만 어느 쪽이든 의사 코드로 사용할 수 있습니다).

#include <QLabel>
#include <QPoint>
#include <QMouseEvent>

class MyLabel : public QLabel
{
    Q_OBJECT
    public:
        MyLabel(QObject *parent) : QLabel(parent)

     ...

     protected:
         void QWidget::mousePressEvent(QMouseEvent * event)
         {
             ...
             QPoint localPosition = event.pos();
             // Work on the desired point
             ...
         }
};

따라서 사용 사례에 따라 다음 메서드에 대한 문서를 조사해야 합니다.

void QWidget::mousePressEvent(QMouseEvent * event) [가상 보호]

이벤트 이벤트에 대한 이 이벤트 핸들러는 위젯에 대한 마우스 누르기 이벤트를 수신하기 위해 하위 클래스에서 다시 구현될 수 있습니다.

mousePressEvent()에서 새 위젯을 생성하는 경우 기본 창 시스템(또는 X11 창 관리자), 위젯 위치 등에 따라 mouseReleaseEvent()가 예상한 위치에서 종료되지 않을 수 있습니다.

기본 구현에서는 창 외부를 클릭하면 팝업 위젯이 닫히는 것을 구현합니다.다른 위젯 유형의 경우 아무 작업도 수행하지 않습니다.

그리고 이것은 Qt 4에서도 작동하는 로컬 위치를 얻는 방법입니다.float 등의 정밀도가 더 필요한 경우 localPos() 또는 Qt 5에 도입된 다른 방법을 고려할 수 있습니다.

QPoint QMouseEvent::pos() const

이벤트를 수신한 위젯을 기준으로 마우스 커서의 위치를 ​​반환합니다.

마우스 이벤트의 결과로 위젯을 이동하는 경우 흔들리는 동작을 방지하려면 globalPos()에서 반환된 전역 위치를 사용하세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top