2017-12-04 2 views
0

Ive는 Qt 5.9.3을 기반으로 새로운 QML 프로젝트를 만들었습니다. 버튼뿐만 아니라 내 자신의 버튼 (MyButton)과 함께 간단한 ApplicationWindow를 설정하고 결코 onClicked() 이벤트를 발생 시켜서 (분명히) 둘 중 하나를 호출하지 않습니다. 내 응용 프로그램 창이 2 개의 버튼으로 표시됩니다. 둘 중 하나를 클릭하면 내 콘솔 출력에 아무것도 표시되지 않습니다.qml 단추가 실행되지 않음, MouseArea와 동일

또한 내 qml 소스 파일을 .pro 파일로 미리 컴파일하는 것이 중요하다. 시작시 글꼴 오류가 발생하여 C++에서 수정되었으므로 일부 글꼴이 표시되어 더 이상 읽을 수 없으며 오류 또는 경고가 표시되지 않습니다. Ive는 몇 시간을 단지 행운을 비면서 마우스 클릭 이벤트 을 간단하게하려고 노력했다.

도움을 주시면 감사하겠습니다.

import QtQuick 2.7 
import QtQuick.Controls 2.0 

ApplicationWindow { 
    visible: true 
    width: 640 
    height: 480 
    title: "App Title" 
    color: "white" 

    Button { 
     text: "Button" 
     onClicked: { 
      console.log("clicked") 
     } 
    } 
    MyButton { 
     anchors.right: parent.right 
     anchors.top: parent.top 
     onClicked: { 
      console.log("my button clicked") 
     } 
    } 
} 

및 MyButton.qml

import QtQuick 2.7 

Rectangle { 
    id: button 
    width: 100 
    height: 50 
    color: "yellow" 

    signal clicked() 

    MouseArea { 
     id: mouseArea 
     anchors.fill: button 
     visible: false 
     enabled: true 
     onClicked: { 
      console.log("my button mouse clicked") 
      clicked() 
     } 
    } 
} 

UPDATE :

여기 내 main.qml의 나는 매우 어리석은 일을했다. 내 main.cpp 파일에서 내가 수행 한 내가 깨끗하게 될 것이라고 생각하고 자신의 별도의 방법으로 내 QQmlEngine 초기화 코드 이동합니다. 물론 엔진 레퍼런스가 을 벗어나면 내 문제가 발생했습니다. 잘못된 것으로 생각되면 qml 코드가 전혀 작동하지 않는다고 잘못 가정했기 때문에 거기를 보지 않았습니다. 이렇게 늦게까지 미안해, 매우 바쁜 주간이었고 대역폭을 낭비하는 것에 대해 유감스럽게 생각합니다. 나중에 참조 할 수 있도록 훌륭한 디버깅 제안을 해주셔서 감사합니다!

답변

1

QtQuick.Controls 2.0의 Button에 대한 귀하의 문제점에 대해 잘 모르겠습니다. 완벽하게 작동합니다.

자신의 구현으로 MyButton을 사용하면 저 또한 효과가 없습니다.

이유는 visible: falseMouseArea (및 그 모든 자식)을 비활성화하기 때문입니다. 설정하면 enabled: true은 변경되지 않습니다.
설정 visible: false은 불필요합니다. MouseArea은 렌더링 할 것이 없으므로 보이지 않습니다. 당신이 경고를해야한다는 변경하면

: 당신은 신호를 인수 (MouseEvent)을 필요로하는 MouseAreaclicked 전화로

Error: Insufficient arguments

. 자기 정의 신호를 호출하려면, 당신은 여전히 ​​anyting를 얻을 수없는 경우 button.clicked() instead.R이


, 당신이 더 디버깅 단계를 수행해야합니다 호출합니다.

  1. 확인 당신은 당신의 개체 중 하나에 Component.onComplete: console.log("Output works")을 추가하여 예를 들어 console.log를 사용하여 출력을 생성 할 수 있는지 여부.귀하의 의견은 정말 MouseArea가 클릭 할 때 Rectangle의 색상을 변경하여, 고장 여부를

  2. 확인 : color: (mouseArea.pressed ? 'red' : 'green')

  3. 가에 eventFilter를 설치하여 QGuiApplication, 뭔가를 인쇄 할 것이다 (C++에서)를 MouseEvent 경우 등록되어있다.

관련 문제