QML构建MainWindow模板,包含菜单栏、工具栏、状态栏

本文介绍了在Qt QML中使用MessageDialog时遇到的问题,如何通过Qt.createQmlObject动态创建并管理Dialog对象,以及这种方式与C++中对象管理的差异。作者还分享了关于Dialog在QML中的不便之处,并展示了创建和关闭对话框的示例代码。
摘要由CSDN通过智能技术生成

界面

在这里插入图片描述

软件版本

Qt 5.15.2

说明

messageBox使用Qt.createQmlObject构造一个新的MessageDialog,相当于C++中new一个对象,而且用完得自己destroy;如果直接写MessageDialog,实例会一直存在,直到调用destroy或者程序结束才会被销毁,而在被销毁之前再次open时是直接显示的,不是“弹出”,显然没有那味儿了,在使用Dialog这一点上QML着实是有点操蛋了,这不能像C++那样啥使用我就啥时候直接搞个局部对象那么方便,有点自己造轮子的意思了,呵呵。

代码

有报错请忽略,不影响运行,或者自行优化。

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import QtQuick.Dialogs 1.3
import QtQuick.Controls 1.4 as Ctrl14

ApplicationWindow {
    id: root
    width: 960
    height: 720
    visible: true
    title: qsTr("QML MainWindow Temp")

    property var aboutDlg: null
    function showAbout()
    {
        if(aboutDlg == null)
        {
            aboutDlg = Qt.createQmlObject(
                        'import QtQuick 2.15;
                        import QtQuick.Dialogs 1.3;
                        MessageDialog
                        {
                            icon: StandardIcon.Information;
                            text: "这是一个MainWindow示例";
                            visible: true;
                        }',
                        root,
                        "aboutDlg");
            aboutDlg.accepted.connect(onAboutDlgClosed);
        }
    }
    function onAboutDlgClosed()
    {
        aboutDlg.destroy();
        aboutDlg = null;
    }
    //菜单栏
    menuBar: MenuBar
    {
        Menu
        {
            title: qsTr("&File")
            Action { text: qsTr("&New...") }
            Action { text: qsTr("&Open...") }
            Action { text: qsTr("&Save") }
            Action { text: qsTr("Save &As...") }
            MenuSeparator { }   //分割线
            Action
            {
                text: qsTr("&Quit")
                onTriggered: close()
            }
        }
        Menu
        {
            title: qsTr("&Edit")
            Action { text: qsTr("Cu&t") }
            Action { text: qsTr("&Copy") }
            Action { text: qsTr("&Paste") }
        }
        Menu
        {
            title: qsTr("&Help")
            Action
            {
                text: qsTr("&About")
                onTriggered:
                {
                    root.showAbout()
                }
            }
        }
    }
    //工具栏
    header: ToolBar
    {
        Row
        {
            spacing: 10
            ToolButton
            {
                text: 'ToolButton1'
                onClicked: console.log('Button1 Clicked.')
            }
            ToolButton
            {
                text: 'ToolButton2'
                onClicked: console.log('Button2 Clicked.')
            }
            ToolButton
            {
                text: 'ToolButton3'
                onClicked: console.log('Button3 Clicked.')
            }
        }
        background:Rectangle
        {
            anchors.fill:parent
            color:'#008888'
        }
    }
    //状态栏
    footer: Ctrl14.StatusBar
    {
        Row
        {
            Text
            {
                id: statusBar
                text: qsTr("MainWindow StatusBar")
                font.family: 'Arial'
                font.pixelSize: 16
                font.italic: true
                color: '#ff0088'
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值