为啥当我打开对话框时它会禁用所有 qml 项目
Posted
技术标签:
【中文标题】为啥当我打开对话框时它会禁用所有 qml 项目【英文标题】:Why when I open Dialog it will disable all qml item为什么当我打开对话框时它会禁用所有 qml 项目 【发布时间】:2018-06-16 05:51:29 【问题描述】:我的 qt 快速应用程序中有一个自定义对话框,当我单击按钮打开它时,我会收到以下错误:
QQuickItem::stackBefore:不能在0x6d4bd6e220之前堆叠,必须是兄弟
出现此错误后,main.qml
页面上的所有 qml 项目都将禁用且不工作且不交互宽度鼠标。
main.qml
onClicked:
var c= userPorfileCom.createObject(mainWindow);
c.open();
Component
id:userPorfileCom
UserProfilePage
id: userProfilePage
UserProfilePage.qml
JooyaDialog
id: root
IranSanseFontLoader
id: fl
onVisibleChanged:
if(visible)
up.getProfile();
header: ToolBar
id: tbheader
Material.primary: "white"
Material.elevation:1
RowLayout
anchors.fill: parent
ToolButton
contentItem: Image
source: "/images/close.png"
fillMode: Image.Pad
horizontalAlignment: Image.AlignHCenter
verticalAlignment: Image.AlignVCenter
onClicked:
close();
signal profileHasChanged;
UserProfile
id: up
name: tfName.text
lastName: tfLastName.text
gender: cbxGender.currentIndex==0
email: tfEmail.text
phoneNumber: tfMobile.text
onProfileChanged:
loginManager.getUserInfo();
onMessageChanged:
showMessage(message);
onIsProcessingChanged:
console.log("progr in user info");
bipi.visible=isProcessing;
title: qsTr("ویرایش اطلاعات کاربری")
rootWidth:mainWindow.width
rootHeight: mainWindow.height
contentHeight:rootHeight/2
font
family: fl.name
pixelSize: 18
bold: true
//================================================
Flickable
id: flickable
contentHeight: mainClm.implicitHeight+100
flickableDirection: Flickable.AutoFlickIfNeeded
clip: true
anchors.fill: parent
Pane
anchors.fill:parent
Material.accent: Material.Pink
ColumnLayout
id: mainClm
anchors.fill: parent
JooyaTextField
id: tfName
placeholderText: "نام"
Layout.fillWidth: true
text: up.name
JooyaTextField
id: tfLastName
placeholderText: "نام خانوادگی"
Layout.fillWidth: true
text: up.lastName
ComboBox
id: cbxGender
model: ["مرد", "زن"]
anchors.horizontalCenter: parent.horizontalCenter
Layout.fillWidth: true
currentIndex:
if(up.gender)
return 0// "مرد"
else
return 1//"زن"
JooyaTextField
id: tfMobile
placeholderText: "شماره موبایل"
Layout.fillWidth: true
text: up.phoneNumber
inputMethodHints: Qt.ImhDigitsOnly
JooyaTextField
id: tfEmail
placeholderText: "ایمیل"
Layout.fillWidth: true
text: up.email
JooyaButton
id: btnSave
text: "ذخیره"
Layout.fillWidth: true
highlighted: true
onClicked:
up.saveProfile();
ScrollBar.vertical: ScrollBar
width: 3
ProgressIndicator
id: bipi
【问题讨论】:
【参考方案1】:如果两个项目在选项卡焦点链中而不是兄弟,它将不起作用, 这意味着选项卡焦点链中的内容必须具有相同的直接父级。
http://doc.qt.io/qt-5/qquickitem.html#stackBefore
【讨论】:
我不知道如何使用它来解决问题 我真的无法进一步帮助您,据我所知,问题不在于您提供的代码。您可能需要调试以找出调用 QQuickItem::stackBefore(const QQuickItem *sibling) 以及 0x6d4bd6e220 是什么,以便使它们成为兄弟。以上是关于为啥当我打开对话框时它会禁用所有 qml 项目的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 中禁用基于对话框的 MFC 应用程序的自动关闭?