Кнопка 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
Если вы все еще не получили ничего, вам нужно будет предпринять дальнейшие шаги по отладке.
Проверьте, можете ли вы генерировать какие-либо выходные данные, используя
console.log
например, добавивComponent.onComplete: console.log("Output works")
к одному из ваших объектов.Проверьте, действительно ли ваш ввод нарушен, изменив цвет
Rectangle
когдаMouseArea
нажата:color: (mouseArea.pressed ? 'red' : 'green')
Установить
eventFilter
на вашQGuiApplication
(в C++), который будет печатать что-то, еслиMouseEvent
зарегистрирован.