Кнопка qml не срабатывает, то же самое с MouseArea

Я создал новый проект QML на основе Qt 5.9.3. Я устанавливаю простое окно ApplicationWindow с кнопкой, а также свою собственную кнопку (MyButton), и я никогда не получаю событие onClicked() для запуска (очевидно) ни для одного из них. Окно моего приложения выскакивает с отображением 2 кнопок. Нажатие на любой из них ничего не показывает в моем выводе консоли.

Я также предварительно компилирую мои исходные qml-файлы в.pro-файл, если это даже имеет значение. Я получаю некоторые ошибки шрифтов при запуске, которые я исправляю в C++, чтобы заставить некоторые шрифты работать, чтобы я мог видеть что-то, кроме того, что нет ошибок или предупреждений. Я потратил пару часов, просто пытаясь провести простое событие щелчка мышью, но безуспешно.

Любая помощь приветствуется.

Вот мой main.qml:

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()
        }
    }
}

ОБНОВЛЕНИЕ: я сделал очень глупую вещь. в моем файле main.cpp, который я не включил, я думал, что буду чище и перенесу свой код инициализации QQmlEngine в отдельный метод. Конечно, когда ссылка на двигатель вышла за рамки, это вызвало мою проблему. Я не смотрел туда, потому что ошибочно предполагал, что код qml не будет работать вообще, если что-то там будет не так. Извините, что вернулся к этому так поздно, это была очень занятая неделя и извините за трату пропускной способности. Спасибо за отличные предложения по отладке, а также для дальнейшего использования!

1 ответ

Я не знаю о вашей проблеме с Button из QtQuick.Controls 2.0 - у меня отлично работает.

С вашей собственной реализацией MyButton, это не работает для меня тоже.

Причина в том, что visible: false деактивирует MouseArea (и все дети этого) - установка enabled: true не изменит это.
настройка visible: false в любом случае не требуется, как MouseArea не имеет ничего сделать - быть эффективно невидимым.

Как только вы изменили это, вы должны получить предупреждение:

Error: Insufficient arguments

как вы называете сигнал clicked из MouseArea который требует аргумента (MouseEvent). Чтобы позвонить на свой собственный сигнал, позвоните button.clicked() instead.R


Если вы все еще не получили ничего, вам нужно будет предпринять дальнейшие шаги по отладке.

  1. Проверьте, можете ли вы генерировать какие-либо выходные данные, используя console.log например, добавив Component.onComplete: console.log("Output works") к одному из ваших объектов.

  2. Проверьте, действительно ли ваш ввод нарушен, изменив цвет Rectangle когда MouseArea нажата: color: (mouseArea.pressed ? 'red' : 'green')

  3. Установить eventFilter на ваш QGuiApplication (в C++), который будет печатать что-то, если MouseEvent зарегистрирован.

Другие вопросы по тегам