为什么忽略 Qml Popup 模态?
Why Qml Popup modality is ignored?
尽管 modality
设置为 true
且 closePolicy
设置为 NoAutoClose
,但我对 Popup(默认 qml class)不是模态有一个问题。
当我通过单击标准 qml 按钮打开弹出窗口时出现问题。打开Popup后,执行了一个冗长的操作,然后Popup关闭。
当操作为 运行 时,整个应用程序和 Popup 本身都会对鼠标点击做出反应。但它不会关闭弹出窗口。相反,它以某种方式单击按钮,再次打开 Popup。这不应该发生,因为我的 Popup 是模态的。
import QtQuick 2.11
import QtQuick.Window 2.11
import QtQuick.Controls 2.4
ApplicationWindow {
id: main_window
visible: true
width: 800
height: 500
Item {
anchors.fill: parent
Popup {
id: blockingPopup
width: 300
height: 50
modal: true
focus: true
closePolicy: Popup.NoAutoClose
}
Button {
text: "Btn"
onClicked: {
console.log("clicked")
blockingPopup.open();
cppModel.lengthyOperation()
blockingPopup.close();
}
}
}
}
再次总结一下:当我点击模态Popup外部(甚至内部)显示时按钮以某种方式被点击并且操作是运行。
Qt 5.12.0,Linux薄荷 19.2
问题出在我的 cpp 模型函数中的 QCoreApplication::processEvents() 中。它导致对模态弹出窗口的点击被注册为对按钮的点击。
尽管 modality
设置为 true
且 closePolicy
设置为 NoAutoClose
,但我对 Popup(默认 qml class)不是模态有一个问题。
当我通过单击标准 qml 按钮打开弹出窗口时出现问题。打开Popup后,执行了一个冗长的操作,然后Popup关闭。
当操作为 运行 时,整个应用程序和 Popup 本身都会对鼠标点击做出反应。但它不会关闭弹出窗口。相反,它以某种方式单击按钮,再次打开 Popup。这不应该发生,因为我的 Popup 是模态的。
import QtQuick 2.11
import QtQuick.Window 2.11
import QtQuick.Controls 2.4
ApplicationWindow {
id: main_window
visible: true
width: 800
height: 500
Item {
anchors.fill: parent
Popup {
id: blockingPopup
width: 300
height: 50
modal: true
focus: true
closePolicy: Popup.NoAutoClose
}
Button {
text: "Btn"
onClicked: {
console.log("clicked")
blockingPopup.open();
cppModel.lengthyOperation()
blockingPopup.close();
}
}
}
}
再次总结一下:当我点击模态Popup外部(甚至内部)显示时按钮以某种方式被点击并且操作是运行。
Qt 5.12.0,Linux薄荷 19.2
问题出在我的 cpp 模型函数中的 QCoreApplication::processEvents() 中。它导致对模态弹出窗口的点击被注册为对按钮的点击。