为啥当我打开对话框时它会禁用所有 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 项目都将禁用且不工作且不交互宽度鼠标。

ma​​in.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 项目的主要内容,如果未能解决你的问题,请参考以下文章

更改对话框父级禁用拖放

如何将对话框锚定到listview qt qml中的按钮

如何在 Visual Studio 中禁用基于对话框的 MFC 应用程序的自动关闭?

为啥当我为我的 CABasicAnimation 设置低持续时间值时它会跳跃?

为啥打开对话框后我的 jQuery 选择器会失败?

如何在 Twitter Bootstrap 中同时打开两个模态对话框