【qml-2】尝试一个有模式的qml弹窗

背景:

【qml-1】第一次尝试qml与c++交互-CSDN博客

【qml-2】尝试一个有模式的qml弹窗-CSDN博客

学习qml,本次想尝试一个弹窗。之前按照网上的代码模仿了一下,没卵用,它并不是真正的有模式,鼠标点一下旁边区域,它就消失了,而且界面难看至极。也许是之前没玩过qml,可能是哪里操作不对了,所以还是尝试自己做一个。主要是尽量总结的简单明了一些,方便自己记忆。

开始:

在qt creator里面做qml界面太局限了,于是下载了design studio。下载的时候一定不要像我一样,误选择了commercial。

【Qt-license】误操作qt下载导致只能安装商业版,无法安装社区版-CSDN博客

打开design studio,选择桌面工程:

写好项目名字,然后跟creator一样,下面定义好默认路径。qt会自动生成一些文件,为了简化,我删除多余的,尽量简化它。就剩一个app.qml了。当然,它的代码也要删除多余的。个人感觉qml应该挺像vue,也就是js的高级包装。

代码里加一句import QtQuick.Controls,然后左下角工具栏那里才有各种控件的选项。

我让它背景色变成绿色,中间放个按钮。注意,拖拽按钮时,它会有坐标线辅助定位,就像下图这样,有一条纵向的蓝色线条。然后它会自动生成需要的代码。所以如果一开始不熟悉qml语法,这是个更高效的办法。

// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only

import QtQuick 6.5
import QmlPopup
import QtQuick.Controls

Window {
    width: 500
    height: 400
    color: "green"

    visible: true
    title: "QmlPopup"

    Button {
        id: button
        x: 200
        y: 25
        text: qsTr("Button")
    }
}

只不过,这里的window不像creator里的widget那样可以拖拽大小,只能用代码写,也可能我还没找到方法,我这是第一次尝试。但是很多属性都可以在右边的属性栏可视化定制。这就是design比creator强的地方。它是一个前端工具,creator是偏后端的。至少我这样觉得。

弹窗:

然后做一个弹窗,像网上说的使用modal那个属性,反正我没试出来有什么用。后来又借鉴了js当中的用法。比如说csdn,经常看到使用div做的弹窗。其实可以做一个跟父窗体一样大的div,背景色半透明,然后中间是一个看起来像小窗体的div,如此就成有模式的了。相当于在弹出的小窗体和父窗体之间,加了一层屏障,视觉上看起来是弹出了窗体,其它部分不可用。

于是操练起来。同时尝试一下所谓模块化嵌套的概念。就像widget嵌套(提升为)一样。

所以我又加了一个qml文件:FrmPopup.qml,亲测,只要放在跟app.qml一个目录下,它自己就可用了,不用再像creator那样为project添加文件。

import QtQuick 2.15
import QtQuick.Controls 2.15

Popup {
    modal: true //这货反正我没试出来有什么用
    width: parent.width
    height: parent.height
    padding: 0
    
    /**
     * 这种直接扩展属性值的方法挺好,原本实在找不到修改Popup的背景方法,
     * 原来不一定要直接处理,而是要理解qml的思想,使用Rectangle为它
     * 定义背景色透明。
     */
    background: Rectangle {
        color: "transparent"
    }

    Rectangle {
        width: 300
        height: 200
        color: "lightgray"
        anchors.centerIn: parent
        border.color: "gray"

        Text {
            anchors.centerIn: parent
            text: "我是一个弹窗"
            anchors.verticalCenterOffset: -27
        }

        Button {
            y: 225
            text: "Close"
            anchors.bottom: parent.bottom
            anchors.bottomMargin: 35
            anchors.horizontalCenterOffset: 0
            anchors.horizontalCenter: parent.horizontalCenter
            onClicked: popup.close()
        }
    }
}

这里有两个感触:

一个是对属性的扩充,比如注释那里,使用Rangle扩充了Popup的background属性。

一个是anchors锚的使用,相对定位的时候,锚挺好用。语法不用知道,界面上一拖拽,自动生成。

下面把主窗体的按钮那里处理一下,让它弹出。

// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only

import QtQuick 6.5
import QmlPopup
import QtQuick.Controls

Window {
    width: 500
    height: 400
    color: "green"

    visible: true
    title: "QmlPopup"

    Button {
        id: button
        x: 200
        y: 25
        text: qsTr("Button")
        onClicked: popup.open()//按钮点击事件
    }

    //实例化弹窗,相当于creator中的“提升为”
    FrmPopup {
        id: popup
    }
}

看注释,应该很清楚了。

运行:

惊喜的是,那个透明设置,我以为还要指定个百分比,没想到它自动就是半透明状态,省事了。如图,点击关闭按钮,弹窗就关了。

本文完。

  • 19
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: QML-QianWindow-V1版本界面是一款用户界面设计程序,它为开发人员提供了大量可自定义的UI组件,使得开发者可以轻松地创建美观、直观且易于使用的界面。QML-QianWindow-V1版本界面具有界面美观,易用性强以及可扩展性强的特点。该程序提供了多种UI组件如口、按钮、文本框、下拉框、进度条等等。每个组件都可以基于开发需求进行个性化设计,提高了程序的可读性和可维护性。 QML-QianWindow-V1版本界面的口设计功能令人称赞。用户可以定制口的样式、位置和大小等属性,使其符合自己的需求。同时,该程序支持类似IOS与Android风格的Tab、Panel、Dialog等视图控件,让应用的界面更具丰富性和交互性,提升用户体验。 此外,QML-QianWindow-V1版本界面可让用户通过实用的数据模型,快速地创建和管理表格和列表,包括多行、多列的表格和单选或多选列表,使得用户可以方便地处理大量数据。 总之,QML-QianWindow-V1版本界面通过提供易用性和可扩展性强的UI组件来简化界面设计过程,使得开发人员可以迅速开发出优秀的桌面应用程序界面,以满足用户高品质的界面需求。 ### 回答2: QML-Qianwindow-v1版本是一款基于QML语言开发的桌面应用程序,其主要特点是界面设计美观、简单易用,适用于多种应用场景。 该软件的主界面包含五个主要区域:侧边栏、消息中心、主视图、小部件和设置菜单。 侧边栏主要用于导航,其中包含主要的应用程序和功能,使用户可以轻松地进入不同的模块。 消息中心用于显示来自其他应用程序的通知,例如电子邮件或要完成的任务。 主视图是QML-Qianwindow-v1的核心区域,其中包含常见的功能和工具,例如打开的文件、书签和搜索栏。 小部件区域用于显示用户选择的小部件,例如天气预报和日历。 设置菜单区域包含应用程序的设置菜单,用户可以在此处更改应用程序的选项、主题和常规设置。 总体来说,QML-Qianwindow-v1版本的界面设计非常简洁,用户友好,易于使用。它增强了用户的生产力和效率,为用户提供了一种令人愉悦的使用体验。 ### 回答3: QML-QianWindow-v1是一种基于Qt QML开发的简单易用的口界面库。其设计风格简洁明了,适用于各种桌面应用开发。 该库主要由三个部分组成:Title Bar、Main Body和Sidebar。其中,Title Bar是口的标题栏,可以自定义标题、图标、按钮、菜单等。Main Body是页面的主体内容,可以显示各种控件、口和布局。Sidebar是侧边栏,可以显示常用的菜单、工具、快捷方式等。 在QML-QianWindow-v1中,可以使用QianWindow来创建口。QianWindow提供了常用的口操作方法,例如最小化、最大化、关闭等。同时,该库还提供了很多常用的QML组件,例如按钮、文本框、下拉框、列表框等,这些组件可以方便快捷地进行页面设计。此外,在QML-QianWindow-v1中还支持自定义样式,可以根据需要修改组件的颜色、形状、大小等。 QML-QianWindow-v1的界面设计风格简洁明了,同时具有一定的美观度。尤其是Title Bar部分的设计非常灵活,可以根据需要自由定制。Main Body部分支持多种布局方式,可以满足不同页面设计的需求。Sidebar部分则提供了丰富的快捷操作方式,提高了用户的使用效率。 总的来说,QML-QianWindow-v1是一款非常实用的界面库,可以方便快捷地进行桌面应用开发。无论是初学者还是有经验的开发者,都可以轻松使用该库进行界面设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值